mirror of
https://github.com/mainmatter/100-exercises-to-learn-rust
synced 2024-12-26 21:58:49 +01:00
170 lines
No EOL
5.5 KiB
YAML
170 lines
No EOL
5.5 KiB
YAML
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|<code>\\newpage</code>{=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 |