name: "CI" on: push: branches: - main pull_request: branches: - main workflow_dispatch: schedule: # First day of a month - cron: '0 0 1 * *' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get Core Sans uses: actions/checkout@v4 if: "!github.event.pull_request.head.repo.fork" with: fetch-depth: 0 repository: mainmatter/core-sans-a-fonts ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} path: core-sans-a-fonts - name: Install Core Sans Font if: "!github.event.pull_request.head.repo.fork" run: | sudo cp -r core-sans-a-fonts/* /usr/local/share/fonts/ sudo fc-cache -f -v fc-list | grep "Core Sans" - name: Use Fallback font for fork PRs if: "github.event.pull_request.head.repo.fork" run: | sed -i 's/"BoldFont=CoreSansA65.ttf",//g' book/book.toml sed -i 's/"ItalicFont=CoreSansA45It.ttf",//g' book/book.toml sed -i 's/"BoldItalicFont=CoreSansA65It.ttf",//g' book/book.toml sed -i 's/CoreSansA45.ttf/Open Sans:style=Regular/g' book/book.toml - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Install exercise plugin run: cargo install --path helpers/mdbook-exercise-linker - name: Install link shortener plugin run: cargo install --path helpers/mdbook-link-shortener - name: Install mdbook-pandoc, calibre, pdftk and related dependencies run: | cargo install mdbook-pandoc --locked --version 0.7.1 sudo apt-get update sudo apt-get install -y fonts-noto fonts-open-sans calibre pdftk sudo fc-cache -f -v export PANDOC_VERSION=3.3 curl -LsSf https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-linux-amd64.tar.gz | tar zxf - echo "$PWD/pandoc-${PANDOC_VERSION}/bin" >> $GITHUB_PATH shell: bash - name: Setup TeX Live uses: teatimeguest/setup-texlive-action@v3 with: packages: scheme-basic luatex lualatex-math luacolor luatexbase luaotfload framed unicode-math xcolor geometry longtable booktabs array lua-ul etoolbox fancyvrb footnote selnolig natbib csquotes bookmark xurl amsmath setspace iftex - name: Check `tlmgr` version run: tlmgr --version - uses: taiki-e/install-action@v2 with: tool: mdbook - name: Build book env: LINK_SHORTENER_VERIFY: "true" run: | cd book mdbook build - name: Add cover and back to downloadable PDF run: | pdftk book/assets/cover.pdf book/book/pandoc/pdf/100-exercises-to-learn-rust.pdf book/assets/back.pdf cat output book/book/pandoc/pdf/100-exercises-to-learn-rust-with-cover.pdf mv book/book/pandoc/pdf/100-exercises-to-learn-rust-with-cover.pdf book/book/pandoc/pdf/100-exercises-to-learn-rust.pdf - name: Convert HTML to ePUB run: | cd book/book/pandoc/html sed -i 's|\\newpage{=latex}||g' 100-exercises-to-learn-rust.html ebook-convert 100-exercises-to-learn-rust.html 100-exercises-to-learn-rust.epub \ --embed-all-fonts \ --subset-embedded-fonts - name: Link Checker uses: lycheeverse/lychee-action@v1 with: fail: true args: | --exclude-loopback --require-https --no-progress book/book/html/ # Upload the HTML book as an artifact - uses: actions/upload-artifact@v4 with: name: book # When you support multiple formats, the output directory changes # to include the format in its path. path: book/book/html - uses: actions/upload-artifact@v4 with: name: online-pdf path: book/book/pandoc/pdf/100-exercises-to-learn-rust.pdf - uses: actions/upload-artifact@v4 with: name: paperback path: book/book/pandoc/paperback/100-exercises-to-learn-rust.pdf - uses: actions/upload-artifact@v4 with: name: ePUB path: book/book/pandoc/html/100-exercises-to-learn-rust.epub is_fresh: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: sudo apt-get update && sudo apt-get install -y jq - run: | ./helpers/json2redirects.sh book/link2alias.json > site/_redirects # Verify nothing has changed, meaning that the redirect file is up-to-date - run: | git diff --exit-code site/_redirects gravity: runs-on: ubuntu-latest needs: [build] steps: - uses: actions/download-artifact@v4 with: path: book pattern: online-pdf - uses: pnpm/action-setup@v4 with: version: 9 - run: ls -las ./book - name: Run Gravity run: pnpm dlx @gravityci/cli "./book/**/*" env: GRAVITY_TOKEN: ${{ secrets.GRAVITY_TOKEN }} formatter: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dprint/check@v2.2