name: "Website" on: push: branches: - master paths: - website/** pull_request: paths: - website/** workflow_dispatch: {} env: CARGO_TERM_COLOR: always INDEX_HTML_HEAD_INCLUSION: jobs: build: runs-on: ubuntu-latest permissions: contents: read deployments: write pull-requests: write steps: - name: 📥 Clone and checkout repository uses: actions/checkout@v3 - name: 🕸 Install Zola uses: taiki-e/install-action@v2 with: tool: zola@0.20.0 - name: 🔍 Check if `website/other` directory changed uses: dorny/paths-filter@v3 id: changes with: filters: | website-other: - "website/other/**" - name: ✂ Replace template in of index.html run: | # Remove the INDEX_HTML_HEAD_INCLUSION environment variable for build links (not master deploys) git rev-parse --abbrev-ref HEAD | grep master > /dev/null || export INDEX_HTML_HEAD_INCLUSION="" - name: 🌐 Build Graphite website with Zola env: MODE: prod run: | cd website npm run install-fonts zola --config config.toml build --minify - name: 💿 Restore cache of `website/other/dist` directory, if available and `website/other` didn't change if: steps.changes.outputs.website-other != 'true' id: cache-website-other-dist uses: actions/cache/restore@v3 with: path: website/other/dist key: website-other-dist-${{ runner.os }} - name: 🟢 Set up Node only if we are going to build in the next step if: steps.cache-website-other-dist.outputs.cache-hit != 'true' uses: actions/setup-node@v4 with: node-version: "latest" - name: 📁 Build `website/other` directory only if changed or not cached if: steps.cache-website-other-dist.outputs.cache-hit != 'true' id: build-website-other run: | sh website/other/build.sh - name: 💾 Save cache of `website/other/dist` directory if it was built above if: steps.cache-website-other-dist.outputs.cache-hit != 'true' uses: actions/cache/save@v3 with: path: website/other/dist key: ${{ steps.cache-website-other-dist.outputs.cache-primary-key }} - name: 🚚 Move `website/other/dist` contents to `website/public` run: | mkdir -p website/public mv website/other/dist/* website/public - name: 💿 Obtain cache of auto-generated code docs artifacts id: cache-website-code-docs uses: actions/cache/restore@v3 with: path: artifacts key: website-code-docs - name: 📁 Fallback in case auto-generated code docs artifacts weren't cached if: steps.cache-website-code-docs.outputs.cache-hit != 'true' run: | echo "🦀 Initial system version of Rust:" rustc --version rustup update stable echo "🦀 Latest updated version of Rust:" rustc --version cargo test --package graphite-editor --lib -- messages::message::test::generate_message_tree mkdir artifacts mv hierarchical_message_system_tree.txt artifacts/hierarchical_message_system_tree.txt - name: 🚚 Move `artifacts` contents to `website/public` run: | mv artifacts/* website/public - name: 📤 Publish to Cloudflare Pages id: cloudflare uses: cloudflare/pages-action@1 continue-on-error: true with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} gitHubToken: ${{ secrets.GITHUB_TOKEN }} projectName: graphite-website directory: website/public