mirror of
https://github.com/denoland/deno.git
synced 2025-03-04 09:57:11 -05:00

Note that Rust 1.51.1 adds extra verification to avoid miscompiles, so it is possible that this PR causes build failures on CI, in which case it needs to be reverted. See https://blog.rust-lang.org/2021/05/10/Rust-1.52.1).
408 lines
15 KiB
YAML
408 lines
15 KiB
YAML
name: ci
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
build:
|
|
name: ${{ matrix.kind }} ${{ matrix.profile }} ${{ matrix.os }}
|
|
if: |
|
|
github.event_name == 'push' ||
|
|
!startsWith(github.event.pull_request.head.label, 'denoland:')
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 90
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
# TODO(ry) Rename 'kind' to 'job'?
|
|
- os: macos-10.15
|
|
kind: test
|
|
profile: release
|
|
- os: windows-2019
|
|
kind: test
|
|
profile: release
|
|
- os: ${{ github.repository == 'denoland/deno' && 'ubuntu-latest-xl' || 'ubuntu-latest' }}
|
|
kind: bench
|
|
profile: release
|
|
- os: ${{ github.repository == 'denoland/deno' && 'ubuntu-latest-xl' || 'ubuntu-latest' }}
|
|
kind: lint
|
|
profile: debug
|
|
- os: ${{ github.repository == 'denoland/deno' && 'ubuntu-latest-xl' || 'ubuntu-latest' }}
|
|
kind: test
|
|
profile: debug
|
|
# Warning: Do not upgrade test_release to newer version of ubuntu
|
|
# runners. We need to link against older version of glibc in order to
|
|
# run on older systems. glibc in 20.04 is not compatible with 18.04.
|
|
# See #9484.
|
|
- os: ubuntu-18.04
|
|
kind: test
|
|
profile: release
|
|
|
|
# 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 if any of the stages fails (which can be a false negative).
|
|
fail-fast: ${{ github.event_name == 'pull_request' || (github.ref !=
|
|
'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')) }}
|
|
|
|
env:
|
|
RUST_BACKTRACE: full
|
|
RUSTC_FORCE_INCREMENTAL: 1
|
|
CARGO_TERM_COLOR: always
|
|
|
|
steps:
|
|
- name: Configure git
|
|
run: git config --global core.symlinks true
|
|
|
|
- name: Clone repository
|
|
uses: actions/checkout@v2
|
|
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: |
|
|
startsWith(matrix.os, 'ubuntu') &&
|
|
matrix.profile == 'release' &&
|
|
matrix.kind == 'test' &&
|
|
github.repository == 'denoland/deno' &&
|
|
startsWith(github.ref, 'refs/tags/')
|
|
run: |
|
|
mkdir -p target/release
|
|
tar --exclude=.cargo_home --exclude=".git*" --exclude=target --exclude=third_party/prebuilt -czvf target/release/deno_src.tar.gz -C .. deno
|
|
|
|
- name: Install rust
|
|
uses: hecrj/setup-rust-action@v1
|
|
with:
|
|
rust-version: 1.52.1
|
|
|
|
- name: Install clippy and rustfmt
|
|
if: matrix.kind == 'lint'
|
|
run: |
|
|
rustup component add clippy
|
|
rustup component add rustfmt
|
|
|
|
- name: Install Deno
|
|
if: |
|
|
!startsWith(matrix.os, 'windows')
|
|
run: |-
|
|
curl -fsSL https://deno.land/x/install/install.sh | sh -s v1.7.2
|
|
echo "$HOME/.deno/bin" >> $GITHUB_PATH
|
|
|
|
# TODO(ry) Enable on all OSes https://github.com/denoland/deno/issues/10378
|
|
- name: Error on Warning
|
|
if: |
|
|
!startsWith(matrix.os, 'windows')
|
|
run: echo "RUSTFLAGS=-D warnings" >> $GITHUB_ENV
|
|
|
|
- name: Install Deno (Windows)
|
|
if: startsWith(matrix.os, 'windows')
|
|
run: |-
|
|
curl -fsSL https://deno.land/x/install/install.sh | sh -s v1.7.2
|
|
echo "$HOME/.deno/bin" >> $env:GITHUB_PATH
|
|
|
|
- name: Install Python
|
|
uses: actions/setup-python@v1
|
|
with:
|
|
python-version: "3.8"
|
|
architecture: x64
|
|
|
|
- name: Install Node
|
|
uses: actions/setup-node@v2
|
|
with:
|
|
node-version: "16"
|
|
check-latest: true
|
|
|
|
- name: Remove unused versions of Python
|
|
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: |
|
|
runner.os != 'Windows' &&
|
|
matrix.profile == 'release' &&
|
|
matrix.kind == 'test' &&
|
|
github.repository == 'denoland/deno' &&
|
|
(github.ref == 'refs/heads/main' ||
|
|
startsWith(github.ref, 'refs/tags/'))
|
|
uses: google-github-actions/setup-gcloud@master
|
|
with:
|
|
project_id: denoland
|
|
service_account_key: ${{ secrets.GCP_SA_KEY }}
|
|
export_default_credentials: true
|
|
|
|
- name: Setup gcloud (windows)
|
|
if: |
|
|
runner.os == 'Windows' &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
(github.ref == 'refs/heads/main' ||
|
|
startsWith(github.ref, 'refs/tags/'))
|
|
uses: google-github-actions/setup-gcloud@master
|
|
env:
|
|
CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe
|
|
with:
|
|
project_id: denoland
|
|
service_account_key: ${{ secrets.GCP_SA_KEY }}
|
|
export_default_credentials: true
|
|
|
|
- name: Configure canary build
|
|
if: |
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
github.ref == 'refs/heads/main'
|
|
shell: bash
|
|
run: |
|
|
echo "DENO_CANARY=true" >> $GITHUB_ENV
|
|
|
|
- name: Log versions
|
|
run: |
|
|
node -v
|
|
python --version
|
|
rustc --version
|
|
cargo --version
|
|
deno --version
|
|
|
|
# Work around https://github.com/actions/cache/issues/403 by using GNU tar
|
|
# instead of BSD tar.
|
|
- name: Install GNU tar
|
|
if: matrix.os == 'macos-10.15'
|
|
run: |
|
|
brew install gnu-tar
|
|
echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH
|
|
|
|
- name: Cache Cargo home
|
|
uses: actions/cache@v2
|
|
with:
|
|
# See https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci
|
|
path: |
|
|
~/.cargo/registry/index
|
|
~/.cargo/registry/cache
|
|
~/.cargo/git/db
|
|
key:
|
|
a-cargo-home-${{ matrix.os }}-${{ hashFiles('Cargo.lock') }}
|
|
|
|
# In main branch, always creates fresh cache
|
|
- name: Cache build output (main)
|
|
# TODO(kt3k): Change the version to the released version
|
|
# when https://github.com/actions/cache/pull/489 (or 571) is merged.
|
|
uses: actions/cache@03e00da99d75a2204924908e1cca7902cafce66b
|
|
if: github.ref == 'refs/heads/main'
|
|
with:
|
|
path: |
|
|
./target
|
|
key: |
|
|
a-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ hashFiles('Cargo.lock') }}-${{ github.sha }}
|
|
|
|
# Restores cache from the latest main branch's Cache
|
|
- name: Cache build output (PR)
|
|
# TODO(kt3k): Change the version to the released version
|
|
# when https://github.com/actions/cache/pull/489 (or 571) is merged.
|
|
uses: actions/cache@03e00da99d75a2204924908e1cca7902cafce66b
|
|
if: github.ref != 'refs/heads/main'
|
|
with:
|
|
path: |
|
|
./target
|
|
key: |
|
|
dummy # Cache never be created for this key.
|
|
restore-keys: |
|
|
a-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ hashFiles('Cargo.lock') }}-
|
|
|
|
# Skips saving cache in PR branches
|
|
- name: Skip save cache (PR)
|
|
run: echo "CACHE_SKIP_SAVE=true" >> $GITHUB_ENV
|
|
if: github.ref != 'refs/heads/main'
|
|
|
|
- name: Apply and update mtime cache
|
|
uses: ./.github/mtime_cache
|
|
with:
|
|
cache-path: ./target
|
|
|
|
- name: test_format.js
|
|
if: matrix.kind == 'lint'
|
|
run: deno run --unstable --allow-write --allow-read --allow-run ./tools/format.js --check
|
|
|
|
- name: lint.js
|
|
if: matrix.kind == 'lint'
|
|
# TODO(ry) assert matrix.profile == "debug"
|
|
run: deno run --unstable --allow-write --allow-read --allow-run ./tools/lint.js
|
|
|
|
- name: Build release
|
|
if: (matrix.kind == 'test' || matrix.kind == 'bench') && matrix.profile == 'release'
|
|
run: cargo build --release --locked --all-targets -vv
|
|
|
|
- name: Build debug
|
|
if: (matrix.kind == 'test' || matrix.kind == 'bench') && matrix.profile == 'debug'
|
|
run: cargo build --locked --all-targets
|
|
|
|
- name: Pre-release (linux)
|
|
if: |
|
|
startsWith(matrix.os, 'ubuntu') &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release'
|
|
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') &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release'
|
|
run: |
|
|
cd target/release
|
|
zip -r deno-x86_64-apple-darwin.zip deno
|
|
|
|
- name: Pre-release (windows)
|
|
if: |
|
|
startsWith(matrix.os, 'windows') &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release'
|
|
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' &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
github.ref == 'refs/heads/main'
|
|
run: |
|
|
gsutil cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/
|
|
echo $(git rev-parse HEAD) > canary-latest.txt
|
|
gsutil cp canary-latest.txt gs://dl.deno.land/canary-latest.txt
|
|
|
|
- name: Upload canary to dl.deno.land (windows)
|
|
if: |
|
|
runner.os == 'Windows' &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
github.ref == 'refs/heads/main'
|
|
env:
|
|
CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe
|
|
shell: bash
|
|
run: |
|
|
gsutil cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/
|
|
echo $(git rev-parse HEAD) > canary-latest.txt
|
|
gsutil cp canary-latest.txt gs://dl.deno.land/canary-latest.txt
|
|
|
|
- name: Test release
|
|
if: matrix.kind == 'test' && matrix.profile == 'release'
|
|
run: cargo test --release --locked --all-targets
|
|
|
|
- name: Test debug
|
|
if: matrix.kind == 'test' && matrix.profile == 'debug'
|
|
run: |
|
|
cargo test --locked --doc
|
|
cargo test --locked --all-targets
|
|
|
|
# TODO(ry) Because CI is so slow on for OSX and Windows, we currently only run WPT on Linux.
|
|
- name: Configure hosts file for WPT (linux)
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
run: ./wpt make-hosts-file | sudo tee -a /etc/hosts
|
|
working-directory: test_util/wpt/
|
|
|
|
- name: Run web platform tests (release)
|
|
if: startsWith(matrix.os, 'ubuntu') && matrix.kind == 'test' && matrix.profile == 'release'
|
|
run: |
|
|
deno run --unstable --allow-write --allow-read --allow-net --allow-env --allow-run ./tools/wpt.ts setup
|
|
deno run --unstable --allow-write --allow-read --allow-net --allow-env --allow-run ./tools/wpt.ts run --quiet --release
|
|
|
|
- name: Run web platform tests (debug)
|
|
if: startsWith(matrix.os, 'ubuntu') && matrix.kind == 'test' && matrix.profile == 'debug'
|
|
run: |
|
|
deno run --unstable --allow-write --allow-read --allow-net --allow-env --allow-run ./tools/wpt.ts setup
|
|
deno run --unstable --allow-write --allow-read --allow-net --allow-env --allow-run ./tools/wpt.ts run --quiet
|
|
|
|
- name: Run Benchmarks
|
|
if: matrix.kind == 'bench'
|
|
run: cargo bench
|
|
|
|
- name: Post Benchmarks
|
|
if: |
|
|
matrix.kind == 'bench' &&
|
|
github.repository == 'denoland/deno' &&
|
|
github.ref == 'refs/heads/main'
|
|
env:
|
|
DENOBOT_PAT: ${{ secrets.DENOBOT_PAT }}
|
|
run: |
|
|
git clone --depth 1 -b gh-pages https://${DENOBOT_PAT}@github.com/denoland/benchmark_data.git gh-pages
|
|
deno run --unstable -A ./tools/build_benchmark_jsons.js --release
|
|
cd gh-pages
|
|
git config user.email "propelml@gmail.com"
|
|
git config user.name "denobot"
|
|
git add .
|
|
git commit --message "Update benchmarks"
|
|
git push origin gh-pages
|
|
|
|
- name: Worker info
|
|
if: matrix.kind == 'bench'
|
|
run: |
|
|
cat /proc/cpuinfo
|
|
cat /proc/meminfo
|
|
|
|
- name: Upload release to dl.deno.land (unix)
|
|
if: |
|
|
runner.os != 'Windows' &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
startsWith(github.ref, 'refs/tags/')
|
|
run: |
|
|
gsutil cp ./target/release/*.zip gs://dl.deno.land/release/${GITHUB_REF#refs/*/}/
|
|
echo ${GITHUB_REF#refs/*/} > release-latest.txt
|
|
gsutil cp release-latest.txt gs://dl.deno.land/release-latest.txt
|
|
|
|
- name: Upload release to dl.deno.land (windows)
|
|
if: |
|
|
runner.os == 'Windows' &&
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
startsWith(github.ref, 'refs/tags/')
|
|
env:
|
|
CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe
|
|
shell: bash
|
|
run: |
|
|
gsutil cp ./target/release/*.zip gs://dl.deno.land/release/${GITHUB_REF#refs/*/}/
|
|
echo ${GITHUB_REF#refs/*/} > release-latest.txt
|
|
gsutil cp release-latest.txt gs://dl.deno.land/release-latest.txt
|
|
|
|
- name: Upload release to GitHub
|
|
uses: softprops/action-gh-release@v1
|
|
if: |
|
|
matrix.kind == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
startsWith(github.ref, 'refs/tags/')
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
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
|
|
target/release/deno_src.tar.gz
|
|
target/release/lib.deno.d.ts
|
|
draft: true
|
|
|
|
- name: Clean before cache
|
|
shell: bash
|
|
run: |
|
|
rm -f target/*/deno target/*/test_server
|
|
rm -rf target/*/examples/
|
|
rm -rf target/*/gn_out/
|
|
rm -rf target/*/*.zip
|
|
|