name: Auto Release on: push: tags: - 'v*' workflow_dispatch: permissions: contents: write jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check project rules run: python3 check_project_rules.py - name: Check release metadata run: npm test - name: Install Chromium and CJK fonts id: setupchrome uses: browser-actions/setup-chrome@v2 with: chrome-version: stable - name: Install CJK fonts run: | sudo apt-get update sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra - name: Install mdpress 0.7.10 env: MDPRESS_VERSION: "0.7.10" MDPRESS_SHA256: "17e53e455996940bbbce64c69c43b3fb543f1501e03b74cf0434074efebd2db4" run: | archive="/tmp/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz" echo "Installing mdpress ${MDPRESS_VERSION}" curl -fsSL "https://github.com/yeasy/mdPress/releases/download/v${MDPRESS_VERSION}/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz" -o "$archive" echo "${MDPRESS_SHA256} $archive" | sha256sum -c - tar xzf "$archive" -C /tmp mdpress sudo mv /tmp/mdpress /usr/local/bin/ mdpress --version - name: Extract tag name id: tag run: | if [[ "$GITHUB_REF" == refs/tags/* ]]; then tag_name="${GITHUB_REF#refs/tags/}" else tag_name="latest" fi safe_tag_name=$(printf '%s' "$tag_name" | sed 's/[^A-Za-z0-9._-]/-/g') safe_tag_name="${safe_tag_name:-latest}" echo "TAG_NAME=${tag_name}" >> "$GITHUB_OUTPUT" echo "SAFE_TAG_NAME=${safe_tag_name}" >> "$GITHUB_OUTPUT" - name: Build PDF run: mdpress build --format pdf --output docker_practice-${{ steps.tag.outputs.SAFE_TAG_NAME || 'latest' }}.pdf - name: Create Release with PDF if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v3 with: generate_release_notes: true files: docker_practice-${{ steps.tag.outputs.SAFE_TAG_NAME }}.pdf - name: Upload PDF as artifact uses: actions/upload-artifact@v7 with: name: docker_practice-pdf path: "docker_practice-*.pdf" - name: Build HTML reader id: htmlreader continue-on-error: true env: CHROME_BIN: ${{ steps.setupchrome.outputs.chrome-path }} run: | # recent pandoc (apt's is too old for --embed-resources); + mermaid-cli using system Chrome curl -fsSL https://github.com/jgm/pandoc/releases/download/3.5/pandoc-3.5-1-amd64.deb -o /tmp/pandoc.deb sudo dpkg -i /tmp/pandoc.deb && pandoc --version | head -1 PUPPETEER_SKIP_DOWNLOAD=true npm install -g @mermaid-js/mermaid-cli@10 TITLE=$(python3 -c "import json,os;print((json.load(open('book.json')).get('title') if os.path.exists('book.json') else '') or '${{ github.event.repository.name }}')") TAG="${{ steps.tag.outputs.SAFE_TAG_NAME || 'latest' }}" python3 tools/render_mermaid.py --book-dir . --svg-out /tmp/mmsvg python3 tools/build_html_reader.py --book-dir . --title "$TITLE" --svg-dir /tmp/mmsvg \ --out "${{ github.event.repository.name }}-${TAG}.html" ls -lh ${{ github.event.repository.name }}-${TAG}.html - name: Attach HTML to release if: steps.htmlreader.outcome == 'success' && startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v3 with: tag_name: ${{ steps.tag.outputs.TAG_NAME }} files: "${{ github.event.repository.name }}-${{ steps.tag.outputs.SAFE_TAG_NAME }}.html" - name: Upload HTML as artifact if: steps.htmlreader.outcome == 'success' uses: actions/upload-artifact@v7 with: name: html-edition path: "${{ github.event.repository.name }}-*.html"