diff options
Diffstat (limited to '.github/workflows/ci.yml')
| -rw-r--r-- | .github/workflows/ci.yml | 262 |
1 files changed, 89 insertions, 173 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ec85c3cb5..9861e53ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,19 @@ -name: ci - -on: [push, pull_request] +# GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT +name: ci +on: + - push + - pull_request concurrency: - group: ${{ github.workflow }}-${{ !contains(github.event.pull_request.labels.*.name, 'test-flaky-ci') && github.head_ref || github.run_id }} + group: '${{ github.workflow }}-${{ !contains(github.event.pull_request.labels.*.name, ''test-flaky-ci'') && github.head_ref || github.run_id }}' cancel-in-progress: true - jobs: build: - name: ${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os }} - if: | + name: '${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os }}' + if: |- github.event_name == 'push' || !startsWith(github.event.pull_request.head.label, 'denoland:') - runs-on: ${{ matrix.os }} + runs-on: '${{ matrix.os }}' timeout-minutes: 120 strategy: matrix: @@ -23,96 +24,75 @@ jobs: - os: macos-12 job: test profile: release - - os: ${{ github.repository == 'denoland/deno' && 'windows-2019-xl' || 'windows-2019' }} + - os: '${{ github.repository == ''denoland/deno'' && ''windows-2019-xl'' || ''windows-2019'' }}' job: test profile: fastci - - os: ${{ github.repository == 'denoland/deno' && 'windows-2019-xl' || 'windows-2019' }} + - os: '${{ github.repository == ''denoland/deno'' && ''windows-2019-xl'' || ''windows-2019'' }}' job: test profile: release - - os: ${{ github.repository == 'denoland/deno' && 'ubuntu-20.04-xl' || 'ubuntu-20.04' }} + - os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-20.04-xl'' || ''ubuntu-20.04'' }}' job: test profile: release use_sysroot: true - - os: ${{ github.repository == 'denoland/deno' && 'ubuntu-20.04-xl' || 'ubuntu-20.04' }} + - os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-20.04-xl'' || ''ubuntu-20.04'' }}' job: bench profile: release use_sysroot: true - - os: ${{ github.repository == 'denoland/deno' && 'ubuntu-20.04-xl' || 'ubuntu-20.04' }} + - os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-20.04-xl'' || ''ubuntu-20.04'' }}' job: test profile: debug use_sysroot: true - - os: ${{ github.repository == 'denoland/deno' && 'ubuntu-20.04-xl' || 'ubuntu-20.04' }} + - os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-20.04-xl'' || ''ubuntu-20.04'' }}' job: lint profile: debug - - # Always run main branch builds to completion. This allows the cache to - # stay mostly up-to-date in situations where a single job fails due to - # e.g. a flaky test. - # Don't fast-fail on tag build because publishing binaries shouldn't be - # prevented if any of the stages fail (which can be a false negative). - fail-fast: ${{ github.event_name == 'pull_request' || - (github.ref != 'refs/heads/main' && - !startsWith(github.ref, 'refs/tags/')) }} - + fail-fast: '${{ github.event_name == ''pull_request'' || (github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/'')) }}' env: CARGO_TERM_COLOR: always RUST_BACKTRACE: full - steps: - name: Configure git - run: | + run: |- git config --global core.symlinks true git config --global fetch.parallel 32 - - name: Clone repository uses: actions/checkout@v3 with: - # Use depth > 1, because sometimes we need to rebuild main and if - # other commits have landed it will become impossible to rebuild if - # the checkout is too shallow. fetch-depth: 5 submodules: recursive - - - name: Create source tarballs (release, linux) - if: | + - name: 'Create source tarballs (release, linux)' + if: |- startsWith(matrix.os, 'ubuntu') && matrix.profile == 'release' && matrix.job == 'test' && github.repository == 'denoland/deno' && startsWith(github.ref, 'refs/tags/') - run: | + 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 - - name: Install Deno if: matrix.job == 'lint' || matrix.job == 'test' uses: denoland/setup-deno@v1 with: deno-version: v1.x - - name: Install Python uses: actions/setup-python@v4 with: python-version: 3.8 - - name: Install Node uses: actions/setup-node@v3 with: node-version: 17 - - name: Remove unused versions of Python - if: startsWith(matrix.os, 'windows') + if: 'startsWith(matrix.os, ''windows'')' run: |- $env:PATH -split ";" | Where-Object { Test-Path "$_\python.exe" } | Select-Object -Skip 1 | ForEach-Object { Move-Item "$_" "$_.disabled" } - - name: Setup gcloud (unix) - if: | + if: |- runner.os != 'Windows' && matrix.profile == 'release' && matrix.job == 'test' && @@ -122,11 +102,10 @@ jobs: uses: google-github-actions/setup-gcloud@v0 with: project_id: denoland - service_account_key: ${{ secrets.GCP_SA_KEY }} + service_account_key: '${{ secrets.GCP_SA_KEY }}' export_default_credentials: true - - name: Setup gcloud (windows) - if: | + if: |- runner.os == 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && @@ -135,24 +114,22 @@ jobs: startsWith(github.ref, 'refs/tags/')) uses: google-github-actions/setup-gcloud@v0 env: - CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe + CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe' with: project_id: denoland - service_account_key: ${{ secrets.GCP_SA_KEY }} + service_account_key: '${{ secrets.GCP_SA_KEY }}' export_default_credentials: true - - name: Configure canary build - if: | + if: |- matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && github.ref == 'refs/heads/main' shell: bash run: echo "DENO_CANARY=true" >> $GITHUB_ENV - - name: Set up incremental LTO and sysroot build if: matrix.use_sysroot - run: | + run: |- # Avoid running man-db triggers, which sometimes takes several minutes # to complete. sudo apt-get remove --purge -y man-db @@ -211,10 +188,9 @@ jobs: CC=clang-15 CFLAGS=-flto=thin --sysroot=/sysroot __0 - - name: Log versions shell: bash - run: | + run: |- node -v python --version rustc --version @@ -224,99 +200,75 @@ jobs: then deno --version fi - - name: Cache Cargo home uses: actions/cache@v3 with: - # See https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci - path: | + path: |- ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git/db - key: 18-cargo-home-${{ matrix.os }}-${{ hashFiles('Cargo.lock') }} - - # In main branch, always creates fresh cache + key: '18-cargo-home-${{ matrix.os }}-${{ hashFiles(''Cargo.lock'') }}' - name: Cache build output (main) uses: actions/cache/save@v3 - if: (matrix.profile == 'release' || matrix.profile == 'fastci') && - github.ref == 'refs/heads/main' + if: (matrix.profile == 'release' || matrix.profile == 'fastci') && github.ref == 'refs/heads/main' with: - path: | + path: |- ./target !./target/*/gn_out !./target/*/*.zip !./target/*/*.tar.gz - key: | - 18-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ github.sha }} - - # Restore cache from the latest 'main' branch build. + 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: 'github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/'')' with: - path: | + path: |- ./target !./target/*/gn_out !./target/*/*.zip !./target/*/*.tar.gz key: never_saved - restore-keys: | - 18-cargo-target-${{ matrix.os }}-${{ matrix.profile }}- - + restore-keys: '18-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-' - name: Apply and update mtime cache if: matrix.profile == 'release' uses: ./.github/mtime_cache with: cache-path: ./target - - # Shallow the cloning the crates.io index makes CI faster because it - # obviates the need for Cargo to clone the index. If we don't do this - # Cargo will `git clone` the github repository that contains the entire - # history of the crates.io index from github. We don't believe the - # identifier '1ecc6299db9ec823' will ever change, but if it does then this - # command must be updated. - name: Shallow clone crates.io index shell: bash - run: | + run: |- if [ ! -d ~/.cargo/registry/index/github.com-1ecc6299db9ec823/.git ] then git clone --depth 1 --no-checkout \ https://github.com/rust-lang/crates.io-index \ ~/.cargo/registry/index/github.com-1ecc6299db9ec823 fi - - name: test_format.js if: matrix.job == 'lint' run: deno run --unstable --allow-write --allow-read --allow-run ./tools/format.js --check - - name: lint.js if: matrix.job == 'lint' - # TODO(ry) assert matrix.profile == "debug" run: deno run --unstable --allow-write --allow-read --allow-run ./tools/lint.js - - name: Build debug - if: | + if: |- (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') run: cargo build --locked --all-targets env: CARGO_PROFILE_DEV_DEBUG: 0 - - name: Build release - if: | + if: |- (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/')))) run: cargo build --release --locked --all-targets - - name: Upload PR artifact (linux) - if: | + if: |- matrix.job == 'test' && matrix.profile == 'release' && (matrix.use_sysroot || (github.repository == 'denoland/deno' && @@ -324,115 +276,95 @@ jobs: startsWith(github.ref, 'refs/tags/')))) uses: actions/upload-artifact@v3 with: - name: deno-${{ github.event.number }} + name: 'deno-${{ github.event.number }}' path: target/release/deno - - name: Pre-release (linux) - if: | + if: |- startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' - run: | + 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: | + if: |- startsWith(matrix.os, 'macOS') && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) - run: | + run: |- cd target/release zip -r deno-x86_64-apple-darwin.zip deno - - name: Pre-release (windows) - if: | + if: |- startsWith(matrix.os, 'windows') && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && (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 - + 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: | + if: |- runner.os != 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && 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)/ - + 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: | + if: |- runner.os == 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && github.ref == 'refs/heads/main' env: - CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe + 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)/ - + 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: | + if: |- matrix.job == 'test' && matrix.profile == 'debug' && !startsWith(github.ref, 'refs/tags/') - run: | + run: |- cargo test --locked --doc cargo test --locked - - name: Test fastci if: (matrix.job == 'test' && matrix.profile == 'fastci') run: cargo test --locked env: CARGO_PROFILE_DEV_DEBUG: 0 - - name: Test release - if: | + if: |- matrix.job == 'test' && matrix.profile == 'release' && (matrix.use_sysroot || ( github.repository == 'denoland/deno' && github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))) run: cargo test --release --locked - - # Since all tests are skipped when we're building a tagged commit - # this is a minimal check to ensure that binary is not corrupted - name: Check deno binary - if: matrix.profile == 'release' && startsWith(github.ref, 'refs/tags/') + if: '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 - - # Verify that the binary actually works in the Ubuntu-16.04 sysroot. - name: Check deno binary (in sysroot) if: matrix.profile == 'release' && matrix.use_sysroot run: sudo chroot /sysroot "$(pwd)/target/release/deno" --version - - # TODO(ry): Because CI is so slow on for OSX and Windows, we currently - # run the Web Platform tests only on Linux. - name: Configure hosts file for WPT - if: startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' + if: '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: | + if: |- startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && matrix.profile == 'debug' && github.ref == 'refs/heads/main' env: DENO_BIN: ./target/debug/deno - run: | + run: |- deno run --allow-env --allow-net --allow-read --allow-run \ --allow-write --unstable \ --lock=tools/deno.lock.json \ @@ -441,14 +373,13 @@ jobs: --allow-write --unstable \ --lock=tools/deno.lock.json \ ./tools/wpt.ts run --quiet --binary="$DENO_BIN" - - name: Run web platform tests (release) - if: | + if: |- startsWith(matrix.os, 'ubuntu') && matrix.job == 'test' && matrix.profile == 'release' && !startsWith(github.ref, 'refs/tags/') env: DENO_BIN: ./target/release/deno - run: | + run: |- deno run --allow-env --allow-net --allow-read --allow-run \ --allow-write --unstable \ --lock=tools/deno.lock.json \ @@ -460,25 +391,23 @@ jobs: --binary="$DENO_BIN" \ --json=wpt.json \ --wptreport=wptreport.json - - name: Upload wpt results to dl.deno.land continue-on-error: true - if: | + if: |- runner.os == 'Linux' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') - run: | + 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 gsutil -h "Cache-Control: public, max-age=3600" cp ./wptreport.json.gz gs://dl.deno.land/wpt/$(git rev-parse HEAD)-wptreport.json.gz echo $(git rev-parse HEAD) > wpt-latest.txt gsutil -h "Cache-Control: no-cache" cp wpt-latest.txt gs://dl.deno.land/wpt-latest.txt - - name: Upload wpt results to wpt.fyi continue-on-error: true - if: | + if: |- runner.os == 'Linux' && matrix.job == 'test' && matrix.profile == 'release' && @@ -486,24 +415,22 @@ jobs: github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') env: WPT_FYI_USER: deno - WPT_FYI_PW: ${{ secrets.WPT_FYI_PW }} - GITHUB_TOKEN: ${{ secrets.DENOBOT_PAT }} - run: | + WPT_FYI_PW: '${{ secrets.WPT_FYI_PW }}' + GITHUB_TOKEN: '${{ secrets.DENOBOT_PAT }}' + run: |- ./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: 'matrix.job == ''bench'' && !startsWith(github.ref, ''refs/tags/'')' run: cargo bench --locked - - name: Post Benchmarks - if: | + if: |- matrix.job == 'bench' && github.repository == 'denoland/deno' && github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') env: - DENOBOT_PAT: ${{ secrets.DENOBOT_PAT }} - run: | + DENOBOT_PAT: '${{ secrets.DENOBOT_PAT }}' + run: |- git clone --depth 1 --branch gh-pages \ https://${DENOBOT_PAT}@github.com/denoland/benchmark_data.git \ gh-pages @@ -515,66 +442,56 @@ jobs: git add . 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/')) - run: | + if: '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' - run: | + run: |- cat /proc/cpuinfo cat /proc/meminfo - - name: Upload release to dl.deno.land (unix) - if: | + if: |- runner.os != 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && 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/*/}/ - + 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: | + if: |- runner.os == 'Windows' && matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && startsWith(github.ref, 'refs/tags/') env: - CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe + 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/release/${GITHUB_REF#refs/*/}/ - + run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/release/${GITHUB_REF#refs/*/}/' - name: Create release notes shell: bash - if: | + if: |- matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && startsWith(github.ref, 'refs/tags/') - run: | + 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: | + if: |- matrix.job == 'test' && matrix.profile == 'release' && github.repository == 'denoland/deno' && startsWith(github.ref, 'refs/tags/') env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' with: - files: | + files: |- target/release/deno-x86_64-pc-windows-msvc.zip target/release/deno-x86_64-unknown-linux-gnu.zip target/release/deno-x86_64-apple-darwin.zip @@ -582,21 +499,20 @@ jobs: target/release/lib.deno.d.ts body_path: target/release/release-notes.md draft: true - publish-canary: name: publish canary runs-on: ubuntu-20.04 - needs: ["build"] + needs: + - build if: github.repository == 'denoland/deno' && github.ref == 'refs/heads/main' steps: - name: Setup gcloud uses: google-github-actions/setup-gcloud@v0 with: project_id: denoland - service_account_key: ${{ secrets.GCP_SA_KEY }} + service_account_key: '${{ secrets.GCP_SA_KEY }}' export_default_credentials: true - - name: Upload canary version file to dl.deno.land - run: | + run: |- echo ${{ github.sha }} > canary-latest.txt gsutil -h "Cache-Control: no-cache" cp canary-latest.txt gs://dl.deno.land/canary-latest.txt |
