/ .github / workflows / website.yaml
website.yaml
 1  on:
 2    push:
 3      branches: ["main"]
 4    pull_request:
 5      branches: ["**"]
 6  
 7  permissions:
 8    contents: read
 9  
10  concurrency:
11    group: "pages"
12    cancel-in-progress: false
13  
14  env:
15    RUST_VERSION: "1.92.0"
16    CARGO_INCREMENTAL: "0"
17    CARGO_PROFILE_TEST_DEBUG: "0"
18    NODE_VERSION: "24"
19    BINARYEN_VERSION: "124"
20    WASM_BINDGEN_VERSION: "0.2.100"
21  
22  jobs:
23    build:
24      name: Build
25      runs-on: ubuntu-latest
26      steps:
27        - name: Checkout repository
28          uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
29          with:
30            persist-credentials: true
31        - name: Setup Bun
32          uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76 # v2.0.2
33        - name: Fetch Rust and add target
34          run: |
35            rustup toolchain install ${RUST_VERSION}-x86_64-unknown-linux-gnu
36            rustup override set ${RUST_VERSION}-x86_64-unknown-linux-gnu
37            rustup target add wasm32-unknown-unknown
38        - name: Cache Rust dependencies
39          uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2.8.1
40        - name: Install wasm-bindgen
41          uses: taiki-e/install-action@a24ba45235ed716ff76646268742990dc9458860 # v2.62.42
42          with:
43            tool: wasm-bindgen@${{ env.WASM_BINDGEN_VERSION }}
44        - name: Install wasm-opt
45          run: |
46            curl -L https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz -o binaryen.tar.gz
47            tar -xzf binaryen.tar.gz
48            mv binaryen-version_${BINARYEN_VERSION} binaryen
49        - name: Setup Pages
50          id: pages
51          uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
52        - name: Install Node dependencies and build
53          working-directory: ./duper_website
54          run: |
55            bun install
56            bun wasm:build
57            bun wasm:bindgen
58            ../binaryen/bin/wasm-opt -Os ./pkg/duper_website_bg.wasm -o ./pkg/duper_website_bg.wasm
59            bun run build
60        - name: Upload artifact
61          if: ${{ github.ref == 'refs/heads/main' }}
62          uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
63          with:
64            path: ./duper_website/docs/.vitepress/dist
65  
66    deploy:
67      name: Deploy
68      runs-on: ubuntu-latest
69      if: ${{ github.ref == 'refs/heads/main' }}
70      environment:
71        name: github-pages
72        url: ${{ steps.deployment.outputs.page_url }}
73      needs: build
74      permissions:
75        pages: write
76        id-token: write
77      steps:
78        - name: Deploy to GitHub Pages
79          id: deployment
80          uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5