mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
e5ae142fbe
This implements officially blessed and tested deno binaries for ARM64. Thanks to @LukeChannings for his tireless work in maintaining the deno-arm64 [1] repo, without which this project would have been far more complicated. For those of you requiring support for older GLIBC versions, that repo may still be required for the near future. Limitations: - This initial build is built on Ubuntu 22 using the stock GLIBC, which will limit the utility of these binaries in certain use-cases (eg: early versions of Ubuntu). We will attempt to support earlier versions of ARM64 GLIBC in a later revision. - Like the stock Linux x64 build, this is not a static build and requires GLIBC. Running on Alpine will require installation of GLIBC. Fixes #1846, #4862 [1] https://github.com/LukeChannings/deno-arm64
665 lines
29 KiB
YAML
665 lines
29 KiB
YAML
# GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT
|
|
|
|
name: ci
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
tags:
|
|
- '*'
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- reopened
|
|
- synchronize
|
|
- ready_for_review
|
|
concurrency:
|
|
group: '${{ github.workflow }}-${{ !contains(github.event.pull_request.labels.*.name, ''ci-test-flaky'') && github.head_ref || github.run_id }}'
|
|
cancel-in-progress: true
|
|
jobs:
|
|
pre_build:
|
|
name: pre-build
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
skip_build: '${{ steps.check.outputs.skip_build }}'
|
|
steps:
|
|
- name: Configure git
|
|
run: |-
|
|
git config --global core.symlinks true
|
|
git config --global fetch.parallel 32
|
|
if: github.event.pull_request.draft == true
|
|
- name: Clone repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 5
|
|
submodules: false
|
|
if: github.event.pull_request.draft == true
|
|
- id: check
|
|
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 'skip_build=true' >> $GITHUB_OUTPUT)
|
|
if: github.event.pull_request.draft == true
|
|
build:
|
|
name: '${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os }}-${{ matrix.arch }}'
|
|
needs:
|
|
- pre_build
|
|
if: '${{ needs.pre_build.outputs.skip_build != ''true'' }}'
|
|
runs-on: '${{ matrix.runner }}'
|
|
timeout-minutes: 120
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: macos
|
|
arch: x86_64
|
|
runner: macos-12
|
|
job: test
|
|
profile: debug
|
|
- os: macos
|
|
arch: x86_64
|
|
runner: '${{ (!contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'')) && ''ubuntu-22.04'' || ''macos-12'' }}'
|
|
job: test
|
|
profile: release
|
|
skip: '${{ !contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'') }}'
|
|
- os: macos
|
|
arch: aarch64
|
|
runner: macos-14
|
|
job: test
|
|
profile: debug
|
|
- os: macos
|
|
arch: aarch64
|
|
runner: '${{ (!contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'')) && ''ubuntu-22.04'' || ''macos-14'' }}'
|
|
job: test
|
|
profile: release
|
|
skip: '${{ !contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'') }}'
|
|
- os: windows
|
|
arch: x86_64
|
|
runner: windows-2022
|
|
job: test
|
|
profile: debug
|
|
- os: windows
|
|
arch: x86_64
|
|
runner: '${{ (!contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'')) && ''ubuntu-22.04'' || github.repository == ''denoland/deno'' && ''windows-2022-xl'' || ''windows-2022'' }}'
|
|
job: test
|
|
profile: release
|
|
skip: '${{ !contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'') }}'
|
|
- os: linux
|
|
arch: x86_64
|
|
runner: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
|
|
job: test
|
|
profile: release
|
|
use_sysroot: true
|
|
wpt: '${{ !startsWith(github.ref, ''refs/tags/'') }}'
|
|
- os: linux
|
|
arch: x86_64
|
|
runner: '${{ (!contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'' && !contains(github.event.pull_request.labels.*.name, ''ci-bench''))) && ''ubuntu-22.04'' || github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
|
|
job: bench
|
|
profile: release
|
|
use_sysroot: true
|
|
skip: '${{ !contains(github.event.pull_request.labels.*.name, ''ci-full'') && (github.event_name == ''pull_request'' && !contains(github.event.pull_request.labels.*.name, ''ci-bench'')) }}'
|
|
- os: linux
|
|
arch: x86_64
|
|
runner: ubuntu-22.04
|
|
job: test
|
|
profile: debug
|
|
use_sysroot: true
|
|
- os: linux
|
|
arch: x86_64
|
|
runner: ubuntu-22.04
|
|
job: lint
|
|
profile: debug
|
|
- os: linux
|
|
arch: aarch64
|
|
runner: ubicloud-standard-16-arm
|
|
job: test
|
|
profile: debug
|
|
- os: linux
|
|
arch: aarch64
|
|
runner: ubicloud-standard-16-arm
|
|
job: test
|
|
profile: release
|
|
- os: macos
|
|
arch: x86_64
|
|
runner: macos-12
|
|
job: lint
|
|
profile: debug
|
|
- os: windows
|
|
arch: x86_64
|
|
runner: windows-2022
|
|
job: lint
|
|
profile: debug
|
|
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
|
|
RUST_LIB_BACKTRACE: 0
|
|
steps:
|
|
- name: Configure git
|
|
run: |-
|
|
git config --global core.symlinks true
|
|
git config --global fetch.parallel 32
|
|
if: '!(matrix.skip)'
|
|
- name: Clone repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 5
|
|
submodules: false
|
|
if: '!(matrix.skip)'
|
|
- name: Clone submodule ./test_util/std
|
|
run: git submodule update --init --recursive --depth=1 -- ./test_util/std
|
|
if: '!(matrix.skip)'
|
|
- name: Clone submodule ./test_util/wpt
|
|
run: git submodule update --init --recursive --depth=1 -- ./test_util/wpt
|
|
if: '!(matrix.skip) && (matrix.wpt)'
|
|
- name: Clone submodule ./tools/node_compat/node
|
|
run: git submodule update --init --recursive --depth=1 -- ./tools/node_compat/node
|
|
if: '!(matrix.skip) && (matrix.job == ''lint'' && matrix.os == ''linux'')'
|
|
- name: 'Create source tarballs (release, linux)'
|
|
if: |-
|
|
!(matrix.skip) && (matrix.os == 'linux' &&
|
|
matrix.profile == 'release' &&
|
|
matrix.job == 'test' &&
|
|
github.repository == 'denoland/deno' &&
|
|
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: dsherret/rust-toolchain-file@v1
|
|
if: '!(matrix.skip)'
|
|
- if: '!(matrix.skip) && (matrix.job == ''lint'' || matrix.job == ''test'' || matrix.job == ''bench'')'
|
|
name: Install Deno
|
|
uses: denoland/setup-deno@v1
|
|
with:
|
|
deno-version: v1.x
|
|
- name: Install Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.11
|
|
if: '!(matrix.skip) && (matrix.job != ''lint'' && (matrix.os != ''linux'' || matrix.arch != ''aarch64''))'
|
|
- name: Remove unused versions of Python
|
|
if: '!(matrix.skip) && (matrix.job != ''lint'' && (matrix.os != ''linux'' || matrix.arch != ''aarch64'') && (matrix.os == ''windows''))'
|
|
shell: pwsh
|
|
run: |-
|
|
$env:PATH -split ";" |
|
|
Where-Object { Test-Path "$_\python.exe" } |
|
|
Select-Object -Skip 1 |
|
|
ForEach-Object { Move-Item "$_" "$_.disabled" }
|
|
- if: '!(matrix.skip) && (matrix.job == ''bench'')'
|
|
name: Install Node
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18
|
|
- name: Install protoc
|
|
uses: arduino/setup-protoc@v3
|
|
with:
|
|
version: '21.12'
|
|
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
|
if: '!(matrix.skip)'
|
|
- if: |-
|
|
!(matrix.skip) && (matrix.profile == 'release' &&
|
|
matrix.job == 'test' &&
|
|
github.repository == 'denoland/deno' &&
|
|
(github.ref == 'refs/heads/main' ||
|
|
startsWith(github.ref, 'refs/tags/')))
|
|
name: Authenticate with Google Cloud
|
|
uses: google-github-actions/auth@v1
|
|
with:
|
|
project_id: denoland
|
|
credentials_json: '${{ secrets.GCP_SA_KEY }}'
|
|
export_environment_variables: true
|
|
create_credentials_file: true
|
|
- name: Setup gcloud (unix)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.os != 'windows' &&
|
|
matrix.profile == 'release' &&
|
|
matrix.job == 'test' &&
|
|
github.repository == 'denoland/deno' &&
|
|
(github.ref == 'refs/heads/main' ||
|
|
startsWith(github.ref, 'refs/tags/')))
|
|
uses: google-github-actions/setup-gcloud@v1
|
|
with:
|
|
project_id: denoland
|
|
- name: Setup gcloud (windows)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.os == 'windows' &&
|
|
matrix.profile == 'release' &&
|
|
matrix.job == 'test' &&
|
|
github.repository == 'denoland/deno' &&
|
|
(github.ref == 'refs/heads/main' ||
|
|
startsWith(github.ref, 'refs/tags/')))
|
|
uses: google-github-actions/setup-gcloud@v1
|
|
env:
|
|
CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe'
|
|
with:
|
|
project_id: denoland
|
|
- name: Configure canary build
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
github.ref == 'refs/heads/main')
|
|
run: echo "DENO_CANARY=true" >> $GITHUB_ENV
|
|
- if: '!(matrix.skip) && (matrix.use_sysroot)'
|
|
name: Set up incremental LTO and sysroot build
|
|
run: |-
|
|
# Avoid running man-db triggers, which sometimes takes several minutes
|
|
# to complete.
|
|
sudo apt-get remove --purge -y man-db
|
|
# Remove older clang before we install
|
|
sudo apt-get remove 'clang-12*' 'clang-13*' 'clang-14*' 'clang-15*' 'llvm-12*' 'llvm-13*' 'llvm-14*' 'llvm-15*' 'lld-12*' 'lld-13*' 'lld-14*' 'lld-15*'
|
|
|
|
# Install clang-XXX, lld-XXX, and debootstrap.
|
|
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" |
|
|
sudo dd of=/etc/apt/sources.list.d/llvm-toolchain-jammy-16.list
|
|
curl https://apt.llvm.org/llvm-snapshot.gpg.key |
|
|
gpg --dearmor |
|
|
sudo dd of=/etc/apt/trusted.gpg.d/llvm-snapshot.gpg
|
|
sudo apt-get update
|
|
# this was unreliable sometimes, so try again if it fails
|
|
sudo apt-get install --no-install-recommends debootstrap clang-16 lld-16 clang-tools-16 clang-format-16 clang-tidy-16 || echo 'Failed. Trying again.' && sudo apt-get clean && sudo apt-get update && sudo apt-get install --no-install-recommends debootstrap clang-16 lld-16 clang-tools-16 clang-format-16 clang-tidy-16
|
|
# Fix alternatives
|
|
(yes '' | sudo update-alternatives --force --all) || true
|
|
|
|
# Create ubuntu-16.04 sysroot environment, which is used to avoid
|
|
# depending on a very recent version of glibc.
|
|
# `libc6-dev` is required for building any C source files.
|
|
# `file` and `make` are needed to build libffi-sys.
|
|
# `curl` is needed to build rusty_v8.
|
|
sudo debootstrap \
|
|
--include=ca-certificates,curl,file,libc6-dev,make \
|
|
--no-merged-usr --variant=minbase xenial /sysroot \
|
|
http://azure.archive.ubuntu.com/ubuntu
|
|
sudo mount --rbind /dev /sysroot/dev
|
|
sudo mount --rbind /sys /sysroot/sys
|
|
sudo mount --rbind /home /sysroot/home
|
|
sudo mount -t proc /proc /sysroot/proc
|
|
|
|
wget https://github.com/denoland/deno_third_party/raw/master/prebuilt/linux64/libdl/libdl.a
|
|
wget https://github.com/denoland/deno_third_party/raw/master/prebuilt/linux64/libdl/libdl.so.2
|
|
|
|
sudo ln -s libdl.so.2 /sysroot/lib/x86_64-linux-gnu/libdl.so
|
|
sudo ln -s libdl.a /sysroot/lib/x86_64-linux-gnu/libdl.a
|
|
|
|
# Configure the build environment. Both Rust and Clang will produce
|
|
# llvm bitcode only, so we can use lld's incremental LTO support.
|
|
cat >> $GITHUB_ENV << __0
|
|
CARGO_PROFILE_BENCH_INCREMENTAL=false
|
|
CARGO_PROFILE_BENCH_LTO=false
|
|
CARGO_PROFILE_RELEASE_INCREMENTAL=false
|
|
CARGO_PROFILE_RELEASE_LTO=false
|
|
RUSTFLAGS<<__1
|
|
-C linker-plugin-lto=true
|
|
-C linker=clang-16
|
|
-C link-arg=-fuse-ld=lld-16
|
|
-C link-arg=--sysroot=/sysroot
|
|
-C link-arg=-ldl
|
|
-C link-arg=-Wl,--allow-shlib-undefined
|
|
-C link-arg=-Wl,--thinlto-cache-dir=$(pwd)/target/release/lto-cache
|
|
-C link-arg=-Wl,--thinlto-cache-policy,cache_size_bytes=700m
|
|
--cfg tokio_unstable
|
|
${{ env.RUSTFLAGS }}
|
|
__1
|
|
RUSTDOCFLAGS<<__1
|
|
-C linker-plugin-lto=true
|
|
-C linker=clang-16
|
|
-C link-arg=-fuse-ld=lld-16
|
|
-C link-arg=--sysroot=/sysroot
|
|
-C link-arg=-ldl
|
|
-C link-arg=-Wl,--allow-shlib-undefined
|
|
-C link-arg=-Wl,--thinlto-cache-dir=$(pwd)/target/release/lto-cache
|
|
-C link-arg=-Wl,--thinlto-cache-policy,cache_size_bytes=700m
|
|
${{ env.RUSTFLAGS }}
|
|
__1
|
|
CC=clang-16
|
|
CFLAGS=-flto=thin --sysroot=/sysroot
|
|
__0
|
|
- name: Install macOS aarch64 lld
|
|
run: ./tools/install_prebuilt.js ld64.lld
|
|
if: '!(matrix.skip) && (matrix.os == ''macos'' && matrix.arch == ''aarch64'')'
|
|
- name: Install rust-codesign
|
|
run: |-
|
|
./tools/install_prebuilt.js rcodesign
|
|
echo $GITHUB_WORKSPACE/third_party/prebuilt/mac >> $GITHUB_PATH
|
|
if: '!(matrix.skip) && (matrix.os == ''macos'')'
|
|
- name: Log versions
|
|
run: |-
|
|
python --version
|
|
rustc --version
|
|
cargo --version
|
|
which dpkg && dpkg -l
|
|
if [[ "${{ matrix.job }}" == "lint" ]] || [[ "${{ matrix.job }}" == "test" ]]; then
|
|
deno --version
|
|
fi
|
|
if [ "${{ matrix.job }}" == "bench" ]
|
|
then
|
|
node -v
|
|
./tools/install_prebuilt.js wrk hyperfine
|
|
fi
|
|
if: '!(matrix.skip)'
|
|
- name: Cache Cargo home
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |-
|
|
~/.cargo/registry/index
|
|
~/.cargo/registry/cache
|
|
key: '73-cargo-home-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles(''Cargo.lock'') }}'
|
|
restore-keys: '73-cargo-home-${{ matrix.os }}-${{ matrix.arch }}'
|
|
if: '!(matrix.skip)'
|
|
- name: Restore cache build output (PR)
|
|
uses: actions/cache/restore@v3
|
|
if: '!(matrix.skip) && (github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/''))'
|
|
with:
|
|
path: |-
|
|
./target
|
|
!./target/*/gn_out
|
|
!./target/*/*.zip
|
|
!./target/*/*.tar.gz
|
|
key: never_saved
|
|
restore-keys: '73-cargo-target-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.profile }}-${{ matrix.job }}-'
|
|
- name: Apply and update mtime cache
|
|
if: '!(matrix.skip) && (!startsWith(github.ref, ''refs/tags/''))'
|
|
uses: ./.github/mtime_cache
|
|
with:
|
|
cache-path: ./target
|
|
- name: test_format.js
|
|
if: '!(matrix.skip) && (matrix.job == ''lint'' && matrix.os == ''linux'')'
|
|
run: deno run --unstable --allow-write --allow-read --allow-run --allow-net ./tools/format.js --check
|
|
- name: Lint PR title
|
|
if: '!(matrix.skip) && (matrix.job == ''lint'' && github.event_name == ''pull_request'' && matrix.os == ''linux'')'
|
|
env:
|
|
PR_TITLE: '${{ github.event.pull_request.title }}'
|
|
run: deno run ./tools/verify_pr_title.js "$PR_TITLE"
|
|
- name: lint.js
|
|
if: '!(matrix.skip) && (matrix.job == ''lint'')'
|
|
run: deno run --unstable --allow-write --allow-read --allow-run --allow-net ./tools/lint.js
|
|
- name: node_compat/setup.ts --check
|
|
if: '!(matrix.skip) && (matrix.job == ''lint'' && matrix.os == ''linux'')'
|
|
run: deno run --allow-write --allow-read --allow-run=git ./tools/node_compat/setup.ts --check
|
|
- name: Build debug
|
|
if: '!(matrix.skip) && (matrix.job == ''test'' && matrix.profile == ''debug'')'
|
|
run: |-
|
|
df -h
|
|
cargo build --locked --all-targets
|
|
df -h
|
|
env:
|
|
CARGO_PROFILE_DEV_DEBUG: 0
|
|
- name: Build release
|
|
if: |-
|
|
!(matrix.skip) && ((matrix.job == 'test' || matrix.job == 'bench') &&
|
|
matrix.profile == 'release' && (matrix.use_sysroot ||
|
|
github.repository == 'denoland/deno'))
|
|
run: |-
|
|
df -h
|
|
cargo build --release --locked --all-targets
|
|
df -h
|
|
- name: Upload PR artifact (linux)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'test' &&
|
|
matrix.profile == 'release' && (matrix.use_sysroot ||
|
|
(github.repository == 'denoland/deno' &&
|
|
(github.ref == 'refs/heads/main' ||
|
|
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: |-
|
|
!(matrix.skip) && (matrix.os == 'linux' &&
|
|
matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno')
|
|
run: |-
|
|
cd target/release
|
|
zip -r deno-${{ matrix.arch }}-unknown-linux-gnu.zip deno
|
|
./deno types > lib.deno.d.ts
|
|
- name: Pre-release (mac)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.os == 'macos' &&
|
|
matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno')
|
|
env:
|
|
APPLE_CODESIGN_KEY: '${{ secrets.APPLE_CODESIGN_KEY }}'
|
|
APPLE_CODESIGN_PASSWORD: '${{ secrets.APPLE_CODESIGN_PASSWORD }}'
|
|
run: |-
|
|
echo "Key is $(echo $APPLE_CODESIGN_KEY | base64 -d | wc -c) bytes"
|
|
rcodesign sign target/release/deno --code-signature-flags=runtime --p12-password="$APPLE_CODESIGN_PASSWORD" --p12-file=<(echo $APPLE_CODESIGN_KEY | base64 -d) --entitlements-xml-file=cli/entitlements.plist
|
|
cd target/release
|
|
zip -r deno-${{ matrix.arch }}-apple-darwin.zip deno
|
|
- name: Pre-release (windows)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.os == 'windows' &&
|
|
matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno')
|
|
shell: pwsh
|
|
run: 'Compress-Archive -CompressionLevel Optimal -Force -Path target/release/deno.exe -DestinationPath target/release/deno-${{ matrix.arch }}-pc-windows-msvc.zip'
|
|
- name: Upload canary to dl.deno.land
|
|
if: |-
|
|
!(matrix.skip) && (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)/
|
|
echo ${{ github.sha }} > canary-latest.txt
|
|
gsutil -h "Cache-Control: no-cache" cp canary-latest.txt gs://dl.deno.land/canary-$(rustc -vV | sed -n "s|host: ||p")-latest.txt
|
|
- name: Autobahn testsuite
|
|
if: |-
|
|
!(matrix.skip) && ((matrix.os == 'linux' && matrix.arch != 'aarch64') &&
|
|
matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
!startsWith(github.ref, 'refs/tags/'))
|
|
run: target/release/deno run -A --unstable ext/websocket/autobahn/fuzzingclient.js
|
|
- name: 'Test (full, debug)'
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'test' &&
|
|
matrix.profile == 'debug' &&
|
|
!startsWith(github.ref, 'refs/tags/') &&
|
|
matrix.os == 'linux')
|
|
run: cargo test --locked
|
|
env:
|
|
CARGO_PROFILE_DEV_DEBUG: 0
|
|
- name: 'Test (fast, debug)'
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'test' &&
|
|
matrix.profile == 'debug' &&
|
|
(startsWith(github.ref, 'refs/tags/') || matrix.os != 'linux'))
|
|
run: |-
|
|
cargo test --locked --lib
|
|
cargo test --locked --test '*'
|
|
env:
|
|
CARGO_PROFILE_DEV_DEBUG: 0
|
|
- name: Test (release)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
(matrix.use_sysroot || (
|
|
github.repository == 'denoland/deno' &&
|
|
!startsWith(github.ref, 'refs/tags/'))))
|
|
run: cargo test --release --locked
|
|
- name: Check deno binary
|
|
if: '!(matrix.skip) && (matrix.profile == ''release'' && startsWith(github.ref, ''refs/tags/''))'
|
|
run: target/release/deno eval "console.log(1+2)" | grep 3
|
|
env:
|
|
NO_COLOR: 1
|
|
- name: Check deno binary (in sysroot)
|
|
if: '!(matrix.skip) && (matrix.profile == ''release'' && matrix.use_sysroot)'
|
|
run: sudo chroot /sysroot "$(pwd)/target/release/deno" --version
|
|
- name: Configure hosts file for WPT
|
|
if: '!(matrix.skip) && (matrix.wpt)'
|
|
run: ./wpt make-hosts-file | sudo tee -a /etc/hosts
|
|
working-directory: test_util/wpt/
|
|
- name: Run web platform tests (debug)
|
|
if: '!(matrix.skip) && (matrix.wpt && matrix.profile == ''debug'')'
|
|
env:
|
|
DENO_BIN: ./target/debug/deno
|
|
run: |-
|
|
deno run --allow-env --allow-net --allow-read --allow-run \
|
|
--allow-write --unstable \
|
|
--lock=tools/deno.lock.json \
|
|
./tools/wpt.ts setup
|
|
deno run --allow-env --allow-net --allow-read --allow-run \
|
|
--allow-write --unstable \
|
|
--lock=tools/deno.lock.json \
|
|
./tools/wpt.ts run --quiet --binary="$DENO_BIN"
|
|
- name: Run web platform tests (release)
|
|
if: '!(matrix.skip) && (matrix.wpt && matrix.profile == ''release'')'
|
|
env:
|
|
DENO_BIN: ./target/release/deno
|
|
run: |-
|
|
deno run --allow-env --allow-net --allow-read --allow-run \
|
|
--allow-write --unstable \
|
|
--lock=tools/deno.lock.json \
|
|
./tools/wpt.ts setup
|
|
deno run --allow-env --allow-net --allow-read --allow-run \
|
|
--allow-write --unstable \
|
|
--lock=tools/deno.lock.json \
|
|
./tools/wpt.ts run --quiet --release \
|
|
--binary="$DENO_BIN" \
|
|
--json=wpt.json \
|
|
--wptreport=wptreport.json
|
|
- name: Upload wpt results to dl.deno.land
|
|
continue-on-error: true
|
|
if: |-
|
|
!(matrix.skip) && (matrix.wpt &&
|
|
matrix.os == 'linux' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
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
|
|
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: |-
|
|
!(matrix.skip) && (matrix.wpt &&
|
|
matrix.os == 'linux' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
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: |-
|
|
./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.skip) && (matrix.job == ''bench'' && !startsWith(github.ref, ''refs/tags/''))'
|
|
run: cargo bench --locked
|
|
- name: Post Benchmarks
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'bench' &&
|
|
github.repository == 'denoland/deno' &&
|
|
github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))
|
|
env:
|
|
DENOBOT_PAT: '${{ secrets.DENOBOT_PAT }}'
|
|
run: |-
|
|
git clone --depth 1 --branch gh-pages \
|
|
https://${DENOBOT_PAT}@github.com/denoland/benchmark_data.git \
|
|
gh-pages
|
|
./target/release/deno run --allow-all --unstable \
|
|
./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: Build product size info
|
|
if: '!(matrix.skip) && (matrix.job != ''lint'' && matrix.profile != ''debug'' && 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.skip) && (matrix.job == ''bench'')'
|
|
run: |-
|
|
cat /proc/cpuinfo
|
|
cat /proc/meminfo
|
|
- name: Upload release to dl.deno.land (unix)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.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/*/}/'
|
|
- name: Upload release to dl.deno.land (windows)
|
|
if: |-
|
|
!(matrix.skip) && (matrix.os == 'windows' &&
|
|
matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
startsWith(github.ref, 'refs/tags/'))
|
|
env:
|
|
CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe'
|
|
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
|
|
if: |-
|
|
!(matrix.skip) && (matrix.job == 'test' &&
|
|
matrix.profile == 'release' &&
|
|
github.repository == 'denoland/deno' &&
|
|
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.skip) && (matrix.job == '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-aarch64-apple-darwin.zip
|
|
target/release/deno_src.tar.gz
|
|
target/release/lib.deno.d.ts
|
|
body_path: target/release/release-notes.md
|
|
draft: true
|
|
- name: Save cache build output (main)
|
|
uses: actions/cache/save@v4
|
|
if: '!(matrix.skip) && ((matrix.job == ''test'' || matrix.job == ''lint'') && github.ref == ''refs/heads/main'')'
|
|
with:
|
|
path: |-
|
|
./target
|
|
!./target/*/gn_out
|
|
!./target/*/*.zip
|
|
!./target/*/*.tar.gz
|
|
key: '73-cargo-target-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.profile }}-${{ matrix.job }}-${{ github.sha }}'
|
|
publish-canary:
|
|
name: publish canary
|
|
runs-on: ubuntu-22.04
|
|
needs:
|
|
- build
|
|
if: github.repository == 'denoland/deno' && github.ref == 'refs/heads/main'
|
|
steps:
|
|
- name: Authenticate with Google Cloud
|
|
uses: google-github-actions/auth@v1
|
|
with:
|
|
project_id: denoland
|
|
credentials_json: '${{ secrets.GCP_SA_KEY }}'
|
|
export_environment_variables: true
|
|
create_credentials_file: true
|
|
- name: Setup gcloud
|
|
uses: google-github-actions/setup-gcloud@v1
|
|
with:
|
|
project_id: denoland
|
|
- name: Upload canary version file to dl.deno.land
|
|
run: |-
|
|
echo ${{ github.sha }} > canary-latest.txt
|
|
gsutil -h "Cache-Control: no-cache" cp canary-latest.txt gs://dl.deno.land/canary-latest.txt
|