diff options
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r-- | .github/workflows/ci.yml | 157 |
1 files changed, 91 insertions, 66 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4548a7fc2..fb18722d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,8 +2,17 @@ name: ci on: - - push - - pull_request + push: + branches: + - main + tags: + - '*' + pull_request: + types: + - opened + - reopened + - synchronize + - ready_for_review concurrency: group: '${{ github.workflow }}-${{ !contains(github.event.pull_request.labels.*.name, ''test-flaky-ci'') && github.head_ref || github.run_id }}' cancel-in-progress: true @@ -59,27 +68,37 @@ jobs: with: fetch-depth: 5 submodules: false + - name: Cancel if draft PR + id: exit_early + if: github.event.pull_request.draft == true + shell: bash + run: |- + GIT_MESSAGE=$(git log --format=%s -n 1 ${{github.event.after}}) + echo Commit message: $GIT_MESSAGE + echo $GIT_MESSAGE | grep '\[ci\]' || (echo 'Exiting due to draft PR. Commit with [ci] to bypass.' ; echo 'EXIT_EARLY=true' >> $GITHUB_OUTPUT) - name: Clone submodule ./test_util/std run: git submodule update --init --recursive --depth=1 -- ./test_util/std + if: steps.exit_early.outputs.EXIT_EARLY != 'true' - name: Clone submodule ./test_util/wpt run: git submodule update --init --recursive --depth=1 -- ./test_util/wpt - if: matrix.job == 'test' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test') - name: Clone submodule ./third_party run: git submodule update --init --recursive --depth=1 -- ./third_party - if: matrix.job == 'lint' || matrix.job == 'bench' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'lint' || matrix.job == 'bench') - name: 'Create source tarballs (release, linux)' if: |- - startsWith(matrix.os, 'ubuntu') && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (startsWith(matrix.os, 'ubuntu') && matrix.profile == 'release' && matrix.job == 'test' && github.repository == 'denoland/deno' && - startsWith(github.ref, 'refs/tags/') + startsWith(github.ref, 'refs/tags/')) run: |- mkdir -p target/release tar --exclude=".git*" --exclude=target --exclude=third_party/prebuilt \ -czvf target/release/deno_src.tar.gz -C .. deno - uses: dtolnay/rust-toolchain@stable - - if: matrix.job == 'lint' || matrix.job == 'test' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' + - if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'lint' || matrix.job == 'test') name: Install Deno uses: denoland/setup-deno@v1 with: @@ -88,8 +107,10 @@ jobs: uses: actions/setup-python@v4 with: python-version: 3.8 + if: steps.exit_early.outputs.EXIT_EARLY != 'true' - name: Remove unused versions of Python - if: 'startsWith(matrix.os, ''windows'')' + if: 'steps.exit_early.outputs.EXIT_EARLY != ''true'' && (startsWith(matrix.os, ''windows''))' + shell: pwsh run: |- $env:PATH -split ";" | Where-Object { Test-Path "$_\python.exe" } | @@ -99,14 +120,15 @@ jobs: uses: actions/setup-node@v3 with: node-version: 17 + if: steps.exit_early.outputs.EXIT_EARLY != 'true' - name: Setup gcloud (unix) if: |- - runner.os != 'Windows' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os != 'Windows' && matrix.profile == 'release' && matrix.job == 'test' && github.repository == 'denoland/deno' && (github.ref == 'refs/heads/main' || - startsWith(github.ref, 'refs/tags/')) + startsWith(github.ref, 'refs/tags/'))) uses: google-github-actions/setup-gcloud@v0 with: project_id: denoland @@ -114,12 +136,12 @@ jobs: export_default_credentials: true - name: Setup gcloud (windows) if: |- - runner.os == 'Windows' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os == 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && (github.ref == 'refs/heads/main' || - startsWith(github.ref, 'refs/tags/')) + startsWith(github.ref, 'refs/tags/'))) uses: google-github-actions/setup-gcloud@v0 env: CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe' @@ -129,13 +151,13 @@ jobs: export_default_credentials: true - name: Configure canary build if: |- - matrix.job == 'test' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' + github.ref == 'refs/heads/main') shell: bash run: echo "DENO_CANARY=true" >> $GITHUB_ENV - - if: matrix.use_sysroot + - if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.use_sysroot) name: Set up incremental LTO and sysroot build run: |- # Avoid running man-db triggers, which sometimes takes several minutes @@ -208,6 +230,7 @@ jobs: then deno --version fi + if: steps.exit_early.outputs.EXIT_EARLY != 'true' - name: Cache Cargo home uses: actions/cache@v3 with: @@ -216,9 +239,10 @@ jobs: ~/.cargo/registry/cache ~/.cargo/git/db key: '18-cargo-home-${{ matrix.os }}-${{ hashFiles(''Cargo.lock'') }}' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' - name: Cache build output (main) uses: actions/cache/save@v3 - if: (matrix.profile == 'release' || matrix.profile == 'fastci') && github.ref == 'refs/heads/main' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && ((matrix.profile == 'release' || matrix.profile == 'fastci') && github.ref == 'refs/heads/main') with: path: |- ./target @@ -228,7 +252,7 @@ jobs: key: '18-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ github.sha }}' - name: Cache build output (PR) uses: actions/cache/restore@v3 - if: 'github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/'')' + if: 'steps.exit_early.outputs.EXIT_EARLY != ''true'' && (github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/''))' with: path: |- ./target @@ -238,7 +262,7 @@ jobs: key: never_saved restore-keys: '18-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-' - name: Apply and update mtime cache - if: matrix.profile == 'release' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.profile == 'release') uses: ./.github/mtime_cache with: cache-path: ./target @@ -251,125 +275,126 @@ jobs: https://github.com/rust-lang/crates.io-index \ ~/.cargo/registry/index/github.com-1ecc6299db9ec823 fi + if: steps.exit_early.outputs.EXIT_EARLY != 'true' - name: test_format.js - if: matrix.job == 'lint' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'lint') run: deno run --unstable --allow-write --allow-read --allow-run ./tools/format.js --check - name: lint.js - if: matrix.job == 'lint' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'lint') run: deno run --unstable --allow-write --allow-read --allow-run ./tools/lint.js - name: Build debug if: |- - (matrix.job == 'test' || matrix.job == 'bench') && - matrix.profile == 'debug' + steps.exit_early.outputs.EXIT_EARLY != 'true' && ((matrix.job == 'test' || matrix.job == 'bench') && + matrix.profile == 'debug') run: cargo build --locked --all-targets - name: Build fastci - if: (matrix.job == 'test' && matrix.profile == 'fastci') + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && ((matrix.job == 'test' && matrix.profile == 'fastci')) run: cargo build --locked --all-targets env: CARGO_PROFILE_DEV_DEBUG: 0 - name: Build release if: |- - (matrix.job == 'test' || matrix.job == 'bench') && + steps.exit_early.outputs.EXIT_EARLY != 'true' && ((matrix.job == 'test' || matrix.job == 'bench') && matrix.profile == 'release' && (matrix.use_sysroot || (github.repository == 'denoland/deno' && (github.ref == 'refs/heads/main' || - startsWith(github.ref, 'refs/tags/')))) + startsWith(github.ref, 'refs/tags/'))))) run: cargo build --release --locked --all-targets - name: Upload PR artifact (linux) if: |- - matrix.job == 'test' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test' && matrix.profile == 'release' && (matrix.use_sysroot || (github.repository == 'denoland/deno' && (github.ref == 'refs/heads/main' || - startsWith(github.ref, 'refs/tags/')))) + startsWith(github.ref, 'refs/tags/'))))) uses: actions/upload-artifact@v3 with: name: 'deno-${{ github.event.number }}' path: target/release/deno - name: Pre-release (linux) if: |- - startsWith(matrix.os, 'ubuntu') && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && matrix.profile == 'release' && - github.repository == 'denoland/deno' + github.repository == 'denoland/deno') run: |- cd target/release zip -r deno-x86_64-unknown-linux-gnu.zip deno ./deno types > lib.deno.d.ts - name: Pre-release (mac) if: |- - startsWith(matrix.os, 'macOS') && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (startsWith(matrix.os, 'macOS') && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) + (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))) run: |- cd target/release zip -r deno-x86_64-apple-darwin.zip deno - name: Pre-release (windows) if: |- - startsWith(matrix.os, 'windows') && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (startsWith(matrix.os, 'windows') && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) + (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))) run: Compress-Archive -CompressionLevel Optimal -Force -Path target/release/deno.exe -DestinationPath target/release/deno-x86_64-pc-windows-msvc.zip - name: Upload canary to dl.deno.land (unix) if: |- - runner.os != 'Windows' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os != 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' + github.ref == 'refs/heads/main') run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/' - name: Upload canary to dl.deno.land (windows) if: |- - runner.os == 'Windows' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os == 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' + github.ref == 'refs/heads/main') env: CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe' shell: bash run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/' - name: Test debug if: |- - matrix.job == 'test' && matrix.profile == 'debug' && - !startsWith(github.ref, 'refs/tags/') + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test' && matrix.profile == 'debug' && + !startsWith(github.ref, 'refs/tags/')) run: |- cargo test --locked --doc cargo test --locked - name: Test fastci - if: (matrix.job == 'test' && matrix.profile == 'fastci') + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && ((matrix.job == 'test' && matrix.profile == 'fastci')) run: cargo test --locked env: CARGO_PROFILE_DEV_DEBUG: 0 - name: Test release if: |- - matrix.job == 'test' && matrix.profile == 'release' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test' && matrix.profile == 'release' && (matrix.use_sysroot || ( github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))) + github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')))) run: cargo test --release --locked - name: Check deno binary - if: 'matrix.profile == ''release'' && startsWith(github.ref, ''refs/tags/'')' + if: 'steps.exit_early.outputs.EXIT_EARLY != ''true'' && (matrix.profile == ''release'' && startsWith(github.ref, ''refs/tags/''))' shell: bash run: target/release/deno eval "console.log(1+2)" | grep 3 env: NO_COLOR: 1 - name: Check deno binary (in sysroot) - if: matrix.profile == 'release' && matrix.use_sysroot + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.profile == 'release' && matrix.use_sysroot) run: sudo chroot /sysroot "$(pwd)/target/release/deno" --version - name: Configure hosts file for WPT - if: 'startsWith(matrix.os, ''ubuntu'') && matrix.job == ''test''' + if: 'steps.exit_early.outputs.EXIT_EARLY != ''true'' && (startsWith(matrix.os, ''ubuntu'') && matrix.job == ''test'')' run: ./wpt make-hosts-file | sudo tee -a /etc/hosts working-directory: test_util/wpt/ - name: Run web platform tests (debug) if: |- - startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && matrix.profile == 'debug' && - github.ref == 'refs/heads/main' + github.ref == 'refs/heads/main') env: DENO_BIN: ./target/debug/deno run: |- @@ -383,8 +408,8 @@ jobs: ./tools/wpt.ts run --quiet --binary="$DENO_BIN" - name: Run web platform tests (release) if: |- - startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && - matrix.profile == 'release' && !startsWith(github.ref, 'refs/tags/') + steps.exit_early.outputs.EXIT_EARLY != 'true' && (startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && + matrix.profile == 'release' && !startsWith(github.ref, 'refs/tags/')) env: DENO_BIN: ./target/release/deno run: |- @@ -402,11 +427,11 @@ jobs: - name: Upload wpt results to dl.deno.land continue-on-error: true if: |- - runner.os == 'Linux' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os == 'Linux' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') + github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')) run: |- gzip ./wptreport.json gsutil -h "Cache-Control: public, max-age=3600" cp ./wpt.json gs://dl.deno.land/wpt/$(git rev-parse HEAD).json @@ -416,11 +441,11 @@ jobs: - name: Upload wpt results to wpt.fyi continue-on-error: true if: |- - runner.os == 'Linux' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os == 'Linux' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') + github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')) env: WPT_FYI_USER: deno WPT_FYI_PW: '${{ secrets.WPT_FYI_PW }}' @@ -429,13 +454,13 @@ jobs: ./target/release/deno run --allow-all --lock=tools/deno.lock.json \ ./tools/upload_wptfyi.js $(git rev-parse HEAD) --ghstatus - name: Run benchmarks - if: 'matrix.job == ''bench'' && !startsWith(github.ref, ''refs/tags/'')' + if: 'steps.exit_early.outputs.EXIT_EARLY != ''true'' && (matrix.job == ''bench'' && !startsWith(github.ref, ''refs/tags/''))' run: cargo bench --locked - name: Post Benchmarks if: |- - matrix.job == 'bench' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'bench' && github.repository == 'denoland/deno' && - github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') + github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')) env: DENOBOT_PAT: '${{ secrets.DENOBOT_PAT }}' run: |- @@ -451,30 +476,30 @@ jobs: git commit --message "Update benchmarks" git push origin gh-pages - name: Build product size info - if: 'matrix.job != ''lint'' && matrix.profile != ''fastci'' && github.repository == ''denoland/deno'' && (github.ref == ''refs/heads/main'' || startsWith(github.ref, ''refs/tags/''))' + if: 'steps.exit_early.outputs.EXIT_EARLY != ''true'' && (matrix.job != ''lint'' && matrix.profile != ''fastci'' && github.repository == ''denoland/deno'' && (github.ref == ''refs/heads/main'' || startsWith(github.ref, ''refs/tags/'')))' run: |- du -hd1 "./target/${{ matrix.profile }}" du -ha "./target/${{ matrix.profile }}/deno" - name: Worker info - if: matrix.job == 'bench' + if: steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'bench') run: |- cat /proc/cpuinfo cat /proc/meminfo - name: Upload release to dl.deno.land (unix) if: |- - runner.os != 'Windows' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os != 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - startsWith(github.ref, 'refs/tags/') + startsWith(github.ref, 'refs/tags/')) run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/release/${GITHUB_REF#refs/*/}/' - name: Upload release to dl.deno.land (windows) if: |- - runner.os == 'Windows' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (runner.os == 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - startsWith(github.ref, 'refs/tags/') + startsWith(github.ref, 'refs/tags/')) env: CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe' shell: bash @@ -482,20 +507,20 @@ jobs: - name: Create release notes shell: bash if: |- - matrix.job == 'test' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - startsWith(github.ref, 'refs/tags/') + startsWith(github.ref, 'refs/tags/')) run: |- export PATH=$PATH:$(pwd)/target/release ./tools/release/05_create_release_notes.ts - name: Upload release to GitHub uses: softprops/action-gh-release@v0.1.15 if: |- - matrix.job == 'test' && + steps.exit_early.outputs.EXIT_EARLY != 'true' && (matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && - startsWith(github.ref, 'refs/tags/') + startsWith(github.ref, 'refs/tags/')) env: GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' with: |