diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..ec614e9165 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,129 @@ +name: "CI" + +on: + pull_request: {} + merge_group: {} + +env: + CARGO_TERM_COLOR: always + +jobs: + # Rust format check on GitHub runner + rust-fmt: + runs-on: ubuntu-latest + steps: + - name: ๐Ÿ“ฅ Clone and checkout repository + uses: actions/checkout@v3 + + - name: ๐Ÿšฆ Check if CI can be skipped + id: skip-check + uses: cariad-tech/merge-queue-ci-skipper@main + + - name: ๐Ÿฆ€ Install the latest Rust + if: steps.skip-check.outputs.skip-check != 'true' + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + + - name: ๐Ÿ”ฌ Check Rust formatting + if: steps.skip-check.outputs.skip-check != 'true' + run: cargo fmt --all -- --check + + # License compatibility check on GitHub runner + cargo-deny: + runs-on: ubuntu-latest + steps: + - name: ๐Ÿ“ฅ Clone and checkout repository + uses: actions/checkout@v3 + + - name: ๐Ÿ“œ Check crate license compatibility for root workspace + uses: EmbarkStudios/cargo-deny-action@v2 + with: + command: check bans licenses sources + + - name: ๐Ÿ“œ Check crate license compatibility for /libraries/rawkit + uses: EmbarkStudios/cargo-deny-action@v2 + with: + command: check bans licenses sources + manifest-path: libraries/rawkit/Cargo.toml + + # Full build and tests on self-hosted runner + build: + runs-on: self-hosted + permissions: + contents: write + deployments: write + pull-requests: write + actions: write + env: + RUSTC_WRAPPER: /usr/bin/sccache + CARGO_INCREMENTAL: 0 + SCCACHE_DIR: /var/lib/github-actions/.cache + + steps: + - name: ๐Ÿ“ฅ Clone and checkout repository + uses: actions/checkout@v3 + + - name: ๐Ÿšฆ Check if CI can be skipped + id: skip-check + uses: cariad-tech/merge-queue-ci-skipper@main + + - name: ๐Ÿ—‘ Clear wasm-bindgen cache + if: steps.skip-check.outputs.skip-check != 'true' + run: rm -r ~/.cache/.wasm-pack || true + + - name: ๐ŸŸข Install the latest Node.js + if: steps.skip-check.outputs.skip-check != 'true' + uses: actions/setup-node@v4 + with: + node-version: 'latest' + + - name: ๐Ÿšง Install build dependencies + if: steps.skip-check.outputs.skip-check != 'true' + run: | + cd frontend + npm run setup + + - name: ๐Ÿฆ€ Install the latest Rust + if: steps.skip-check.outputs.skip-check != 'true' + run: | + rustup update stable + + - name: ๐Ÿฆ€ Fetch Rust dependencies + if: steps.skip-check.outputs.skip-check != 'true' + run: | + cargo fetch --locked + + - name: ๐ŸŒ Build Graphite web code + if: steps.skip-check.outputs.skip-check != 'true' + env: + NODE_ENV: production + run: | + cd frontend + mold -run npm run build + + - name: ๐Ÿ“ค Publish to Cloudflare Pages + if: steps.skip-check.outputs.skip-check != 'true' + 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-dev + directory: frontend/dist + + - name: ๐Ÿ‘• Lint Graphite web formatting + if: steps.skip-check.outputs.skip-check != 'true' + env: + NODE_ENV: production + run: | + cd frontend + npm run lint + + - name: ๐Ÿงช Run Rust tests + if: steps.skip-check.outputs.skip-check != 'true' + env: + RUSTFLAGS: -Dwarnings + run: | + mold -run cargo test --all-features diff --git a/.github/workflows/build-dev-and-ci.yml b/.github/workflows/deploy-master.yml similarity index 65% rename from .github/workflows/build-dev-and-ci.yml rename to .github/workflows/deploy-master.yml index c903568c0b..64ece22e8b 100644 --- a/.github/workflows/build-dev-and-ci.yml +++ b/.github/workflows/deploy-master.yml @@ -1,22 +1,20 @@ -name: "Editor: Dev & CI" +name: "Deploy Master" on: push: branches: - master - pull_request: {} - merge_group: {} + env: CARGO_TERM_COLOR: always INDEX_HTML_HEAD_REPLACEMENT: jobs: - build: + deploy: runs-on: self-hosted permissions: contents: write deployments: write - pull-requests: write actions: write env: RUSTC_WRAPPER: /usr/bin/sccache @@ -33,7 +31,7 @@ jobs: - name: ๐ŸŸข Install the latest Node.js uses: actions/setup-node@v4 with: - node-version: "latest" + node-version: 'latest' - name: ๐Ÿšง Install build dependencies run: | @@ -42,21 +40,10 @@ jobs: - name: ๐Ÿฆ€ Install the latest Rust run: | - echo "Initial system version:" - rustc --version rustup update stable - echo "Latest updated version:" - rustc --version - - - name: ๐Ÿฆ€ Fetch Rust dependencies - run: | - echo "If it fails here, the committed Cargo.lock may be out of date" - cargo fetch --locked - name: โœ‚ Replace template in of index.html run: | - # Remove the INDEX_HTML_HEAD_REPLACEMENT environment variable for build links (not master deploys) - git rev-parse --abbrev-ref HEAD | grep master > /dev/null || export INDEX_HTML_HEAD_REPLACEMENT="" sed -i "s||$INDEX_HTML_HEAD_REPLACEMENT|" frontend/index.html - name: ๐ŸŒ Build Graphite web code @@ -78,7 +65,6 @@ jobs: directory: frontend/dist - name: ๐Ÿ’ฌ Comment build link URL to commit hash page on GitHub - if: github.ref == 'refs/heads/master' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | @@ -90,29 +76,7 @@ jobs: |-| | ${{ steps.cloudflare.outputs.url }} |" - - name: ๐Ÿ‘• Lint Graphite web formatting - env: - NODE_ENV: production - run: | - cd frontend - npm run lint - - - name: ๐Ÿ”ฌ Check Rust formatting - run: | - mold -run cargo fmt --all -- --check - - - name: ๐Ÿฆ€ Build Rust code - env: - RUSTFLAGS: -Dwarnings - run: | - mold -run cargo build --all-features - - - name: ๐Ÿงช Run Rust tests - run: | - mold -run cargo test --all-features - - name: ๐Ÿ“ƒ Generate code documentation info for website - if: github.ref == 'refs/heads/master' run: | cd tools/editor-message-tree cargo run @@ -121,7 +85,6 @@ jobs: mv website/generated/hierarchical_message_system_tree.txt artifacts-generated/hierarchical_message_system_tree.txt - name: ๐Ÿ’ฟ Obtain cache of auto-generated code docs artifacts, to check if they've changed - if: github.ref == 'refs/heads/master' id: cache-website-code-docs uses: actions/cache/restore@v3 with: @@ -129,7 +92,6 @@ jobs: key: website-code-docs - name: ๐Ÿ” Check if auto-generated code docs artifacts changed - if: github.ref == 'refs/heads/master' id: website-code-docs-changed run: | if ! diff --brief --recursive artifacts-generated artifacts; then @@ -157,31 +119,3 @@ jobs: run: | rm -rf artifacts gh workflow run website.yml --ref master - - # miri: - # runs-on: self-hosted - - # steps: - # - uses: actions/checkout@v3 - - # - name: ๐Ÿงช Run Rust miri - # run: | - # mold -run cargo +nightly miri nextest run -j32 --all-features - - cargo-deny: - runs-on: ubuntu-latest - - steps: - - name: ๐Ÿ“ฅ Clone and checkout repository - uses: actions/checkout@v3 - - - name: ๐Ÿ“œ Check crate license compatibility for root workspace - uses: EmbarkStudios/cargo-deny-action@v2 - with: - command: check bans licenses sources - - - name: ๐Ÿ“œ Check crate license compatibility for /libraries/rawkit - uses: EmbarkStudios/cargo-deny-action@v2 - with: - command: check bans licenses sources - manifest-path: libraries/rawkit/Cargo.toml