briandominick / codewriting

Source for Codewriting (book) and the Codewriting/Code the Docs (site/blog)
Other
49 stars 13 forks source link

Can't build liquidoc #13

Open plaindocs opened 5 years ago

plaindocs commented 5 years ago

I'm trying to build the single page html with a view to adding epub generation. But currently stuck at:

WARN: Problem while copying assets. File exists @ dir_s_mkdir - _build/book-cw/_data
Traceback (most recent call last):
    23: from /home/samuel/.gem/ruby/2.5.0/bin/liquidoc:23:in `<main>'
    22: from /home/samuel/.gem/ruby/2.5.0/bin/liquidoc:23:in `load'
    21: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/bin/liquidoc:3:in `<top (required)>'
    20: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    19: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    18: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/lib/liquidoc.rb:1127:in `<top (required)>'
    17: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/lib/liquidoc.rb:83:in `config_build'
    16: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/lib/liquidoc.rb:88:in `iterate_build'
    15: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/lib/liquidoc.rb:88:in `each'
    14: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/lib/liquidoc.rb:109:in `block in iterate_build'
    13: from /home/samuel/.gem/ruby/2.5.0/gems/liquidoc-0.8.1/lib/liquidoc.rb:745:in `copy_assets'
    12: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:392:in `cp_r'
    11: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1461:in `fu_each_src_dest'
    10: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1477:in `fu_each_src_dest0'
     9: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1463:in `block in fu_each_src_dest'
     8: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:393:in `block in cp_r'
     7: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:415:in `copy_entry'
     6: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1392:in `wrap_traverse'
     5: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1392:in `each'
     4: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1393:in `block in wrap_traverse'
     3: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1390:in `wrap_traverse'
     2: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:418:in `block in copy_entry'
     1: from /home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1265:in `copy'
/home/samuel/.rubies/ruby-2.5.0/lib/ruby/2.5.0/fileutils.rb:1265:in `mkdir': File exists @ dir_s_mkdir - _build/book-cw/_data (Errno::EEXIST)

Deleting the file/dir doesn't help. Any ideas?

briandominick commented 5 years ago

Thanks for the report, Samuel, and the contribution! Can you run bundle exec liquidoc -c _config/build-global and just give me the few lines leading up to the error?

briandominick commented 5 years ago

If you want to implement ePub, I have some ideas for that, I have an issue open that is basically for that. https://github.com/DocOps/liquidoc-gem/issues/13 -- we could discuss it there :-).

plaindocs commented 5 years ago

Adding the extra .yml in your command leaves me at:

INFO: Copied assets to _build.
INFO: File built: _build/pages/resume.adoc
INFO: Generating PDF. This can take some time...
INFO: Rendered file _build/assets/files/brian-dominick-resume.pdf.
INFO: File built: _build/assets/includes/item-lists.adoc
INFO: File built: _build/publish/assets/includes/item-lists.adoc
INFO: File built: _build/book-cw/backmatter/bibliography.adoc
INFO: File built: _build/book-cw/backmatter/glossary.adoc
INFO: File built: _build/pages/docops-glossary.adoc
INFO: Copied _data/glossary.yml to _build/book-cw/_data.
INFO: Copied README.adoc to _build.
INFO: Copied LICENSE.md to _build.
WARN: Problem while copying assets. File exists @ dir_s_mkdir - _build/book-cw/_data
/home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1262:in `mkdir': File exists @ dir_s_mkdir - _build/book-cw/_data (Errno::EEXIST)
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1262:in `copy'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:415:in `block in copy_entry'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1387:in `wrap_traverse'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1390:in `block in wrap_traverse'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1389:in `each'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1389:in `wrap_traverse'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:412:in `copy_entry'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:390:in `block in cp_r'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1460:in `block in fu_each_src_dest'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1474:in `fu_each_src_dest0'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1458:in `fu_each_src_dest'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:389:in `cp_r'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:745:in `copy_assets'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:109:in `block in iterate_build'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:88:in `each'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:88:in `iterate_build'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:83:in `config_build'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:1127:in `<top (required)>'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/bin/liquidoc:3:in `<top (required)>'
    from /home/samuel/.gem/ruby/2.4.1/bin/liquidoc:22:in `load'
    from /home/samuel/.gem/ruby/2.4.1/bin/liquidoc:22:in `<main>'
briandominick commented 5 years ago

So I've been able to reproduce this exact error using someone else's PR branch, but not my master or your branch. But at least I can work on it. The fix isn't obvious but I'll take a crack at it today.

briandominick commented 5 years ago

I lost the ability to reproduce this error. It's very weird. If it's what I think it is, I'm not sure why it's working at all. Let me know if the following fixes this (and if so maybe you could add it to this PR).

Move the block starting on line 77 up to line 41. So

- stage: copy-book-files
  action: migrate
  message: Copying book files.
  source: book-cw
  target: _build

Should be before anything else tries to write to _build/book-cw/ or a subdir. This doesn't introduce any errors for me, so if it fixes yours I think we're in business.

briandominick commented 5 years ago

Samuel what OS are you on?

plaindocs commented 5 years ago

I'm running on Linux (up to date Antergos / Arch)

$ bundle exec liquidoc --verbose -c _config/build-global.yml 
DEBUG: Base dir: /home/samuel/Nosync/Repositories/codewriting/ (The path from which LiquiDoc CLI commands are relative.)
DEBUG: Executing... config_build
DEBUG: Using config file /home/samuel/Nosync/Repositories/codewriting/_config/build-global.yml.
DEBUG: Validating input file for config file /home/samuel/Nosync/Repositories/codewriting/_config/build-global.yml
DEBUG: Copying assets to _build
INFO: Copied assets to _build.
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/resume-data.yml
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/resume-data.yml
DEBUG: Validating input file for template file _templates/liquid/resume.asciidoc
INFO: File built: _build/pages/resume.adoc
DEBUG: Validating input file for source file _build/pages/resume.adoc
DEBUG: Validating input file for attributes file _config/attributes.yml
DEBUG: Executing Asciidoctor render operation for _build/assets/files/brian-dominick-resume.pdf.
DEBUG: Final pre-parse attributes: ---
imagesdir: assets/images
chapter-label: Chapter
experimental: true
liquidoc_source_uri: 
codewriting_source_uri: https://github.com/briandominick/codewriting
codewriting_website_uri: https://codewriting.org
edition: pdf
icons: font
pdf-fontsdir: theme/fonts
safe: unsafe

INFO: Generating PDF. This can take some time...
DEBUG: Running asciidoctor-pdf -o _build/assets/files/brian-dominick-resume.pdf -b pdf -d article -S unsafe -a imagesdir='assets/images' -a chapter-label='Chapter' -a experimental='true' -a liquidoc_source_uri='' -a codewriting_source_uri='https://github.com/briandominick/codewriting' -a codewriting_website_uri='https://codewriting.org' -a edition='pdf' -a icons='font' -a pdf-fontsdir='theme/fonts' -a safe='unsafe' -a no-header-footer --trace _build/pages/resume.adoc
DEBUG: AsciiDoc attributes: {"imagesdir"=>"assets/images", "chapter-label"=>"Chapter", "experimental"=>true, "liquidoc_source_uri"=>nil, "codewriting_source_uri"=>"https://github.com/briandominick/codewriting", "codewriting_website_uri"=>"https://codewriting.org", "edition"=>"pdf", "icons"=>"font", "pdf-fontsdir"=>"theme/fonts", "safe"=>"unsafe"}
INFO: Rendered file _build/assets/files/brian-dominick-resume.pdf.
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/item-lists.yml
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/item-lists.yml
DEBUG: Validating input file for template file _templates/liquid/item-lists.asciidoc
INFO: File built: _build/assets/includes/item-lists.adoc
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/item-lists.yml
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/item-lists.yml
DEBUG: Validating input file for template file _templates/liquid/item-lists.asciidoc
INFO: File built: _build/publish/assets/includes/item-lists.adoc
DEBUG: Copying LICENSE.md to _build
INFO: Copied LICENSE.md to _build.
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file book-cw/_data/bibliography.yml
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file book-cw/_data/bibliography.yml
DEBUG: Validating input file for template file _templates/liquid/bibliography.asciidoc
INFO: File built: _build/book-cw/backmatter/bibliography.adoc
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/glossary.yml
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/glossary.yml
DEBUG: Validating input file for template file _templates/liquid/glossary.asciidoc
INFO: File built: _build/book-cw/backmatter/glossary.adoc
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/glossary.yml
DEBUG: Executing liquify parsing operation.
DEBUG: Validating input file for data file _data/glossary.yml
DEBUG: Validating input file for template file _templates/liquid/glossary.asciidoc
INFO: File built: _build/pages/docops-glossary.adoc
DEBUG: Copying _data/glossary.yml to _build/book-cw/_data
INFO: Copied _data/glossary.yml to _build/book-cw/_data.
DEBUG: Copying README.adoc to _build
INFO: Copied README.adoc to _build.
DEBUG: Copying book-cw to _build
WARN: Problem while copying assets. File exists @ dir_s_mkdir - _build/book-cw/_data
bundler: failed to load command: liquidoc (/home/samuel/.gem/ruby/2.4.1/bin/liquidoc)
Errno::EEXIST: File exists @ dir_s_mkdir - _build/book-cw/_data
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1262:in `mkdir'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1262:in `copy'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:415:in `block in copy_entry'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1387:in `wrap_traverse'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1390:in `block in wrap_traverse'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1389:in `each'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1389:in `wrap_traverse'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:412:in `copy_entry'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:390:in `block in cp_r'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1460:in `block in fu_each_src_dest'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1474:in `fu_each_src_dest0'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:1458:in `fu_each_src_dest'
  /home/samuel/.rubies/ruby-2.4.1/lib/ruby/2.4.0/fileutils.rb:389:in `cp_r'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:745:in `copy_assets'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:109:in `block in iterate_build'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:88:in `each'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:88:in `iterate_build'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:83:in `config_build'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/lib/liquidoc.rb:1127:in `<top (required)>'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/bin/liquidoc:3:in `require'
  /home/samuel/.gem/ruby/2.4.1/gems/liquidoc-0.8.1/bin/liquidoc:3:in `<top (required)>'
  /home/samuel/.gem/ruby/2.4.1/bin/liquidoc:22:in `load'
  /home/samuel/.gem/ruby/2.4.1/bin/liquidoc:22:in `<top (required)>'
plaindocs commented 5 years ago

There is this if you're not checking if dirs exist

https://medium.com/@ryannovas/ruby-file-and-directory-cheatsheet-16bd36315d46#19f4

or maaaybe related to this

https://github.com/gbiczo/oxcelix/issues/3

or my third guess could be a dubious ruby chruby setup on my end.

briandominick commented 5 years ago

So lacking a suitable local Linux environment at the moment, I've attempted to run the build on Netlify (Ruby 2.3.6) and got the same errors. So at this point I'm pretty convinced Linux is handling directory creation differently than MacOS. I'm sure I'm not the first to run into this, so it's on my list for today/tomorrow.

briandominick commented 5 years ago

I may have this fixed. I think it's a Linux thing that somehow doesn't occur on MacOS. (Not tested on Windows yet, though I haven't had any reports from Windows users unable to build for this reason.)

I think you didn't reorder as advised before that last log you pasted above?

I was able to reproduce the error using Netlify on master (Linux and Ruby 2.3.6), but this PR passes: #29

Would you mind pulling and testing that locally?

plaindocs commented 5 years ago

I did indeed reorder. Trying the PR now.