userland: add archive tools and pinned GoAWK, esbuild, and QuickJS
This commit is contained in:
+331
@@ -0,0 +1,331 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['*']
|
||||
pull_request:
|
||||
branches: ['*']
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
esbuild-platforms:
|
||||
# Split this out into its own runner because it's slow
|
||||
name: esbuild CI (All Platforms)
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Read go.version
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Go ${{ env.GO_VERSION }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
id: go
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: Ensure all platforms can be built
|
||||
run: |
|
||||
git status
|
||||
make platform-all
|
||||
|
||||
# Plan 9 is not a supported platform, but someone wanted esbuild to be able to build for it anyway...
|
||||
- name: Ensure esbuild can be built for Plan 9
|
||||
run: |
|
||||
GOOS=plan9 GOARCH=386 go build ./cmd/esbuild
|
||||
GOOS=plan9 GOARCH=amd64 go build ./cmd/esbuild
|
||||
GOOS=plan9 GOARCH=arm go build ./cmd/esbuild
|
||||
|
||||
- name: Test an old TypeScript version
|
||||
run: make test-old-ts
|
||||
|
||||
esbuild-slow:
|
||||
# Split these out into their own runner because they're very slow
|
||||
name: esbuild CI (Slow Tests)
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Read go.version
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Go ${{ env.GO_VERSION }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
id: go
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
# Note: These tests break with node version 18. Something about WebAssembly.
|
||||
- name: Rollup Tests
|
||||
run: make test-rollup
|
||||
|
||||
- name: Uglify Tests
|
||||
run: CI=1 make uglify
|
||||
|
||||
- name: Type check tsc using tsc
|
||||
run: make test-tsc
|
||||
|
||||
esbuild:
|
||||
name: esbuild CI
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Read go.version (non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $GITHUB_ENV
|
||||
|
||||
- name: Read go.version (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $Env:GITHUB_ENV
|
||||
|
||||
- name: Set up Go ${{ env.GO_VERSION }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
id: go
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: Setup Deno 1.40.0
|
||||
uses: denoland/setup-deno@main
|
||||
with:
|
||||
deno-version: v1.40.0
|
||||
|
||||
- name: go test
|
||||
run: go test -race ./internal/...
|
||||
|
||||
- name: go vet
|
||||
run: go vet ./cmd/... ./internal/... ./pkg/...
|
||||
|
||||
- name: Deno Tests (non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: make test-deno
|
||||
|
||||
- name: Deno Tests (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: make test-deno-windows
|
||||
|
||||
- name: Test for path/filepath
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make no-filepath
|
||||
|
||||
- name: Make sure "check-go-version" works (non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: make check-go-version
|
||||
|
||||
- name: go fmt
|
||||
if: matrix.os == 'macos-latest'
|
||||
run: make fmt-go
|
||||
|
||||
- name: npm ci
|
||||
run: cd scripts && npm ci
|
||||
|
||||
- name: Register Test (ESBUILD_WORKER_THREADS=0, non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: ESBUILD_WORKER_THREADS=0 node scripts/register-test.js
|
||||
|
||||
- name: Register Test
|
||||
run: node scripts/register-test.js
|
||||
|
||||
- name: Verify Source Map
|
||||
run: node scripts/verify-source-map.js
|
||||
|
||||
- name: E2E Tests
|
||||
run: node scripts/end-to-end-tests.js
|
||||
|
||||
- name: JS API Tests (ESBUILD_WORKER_THREADS=0, non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: ESBUILD_WORKER_THREADS=0 node scripts/js-api-tests.js
|
||||
|
||||
- name: JS API Tests
|
||||
run: node scripts/js-api-tests.js
|
||||
|
||||
- name: NodeJS Unref Tests
|
||||
run: node scripts/node-unref-tests.js
|
||||
|
||||
- name: Plugin Tests
|
||||
run: node scripts/plugin-tests.js
|
||||
|
||||
- name: TypeScript Type Definition Tests
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: node scripts/ts-type-tests.js
|
||||
|
||||
- name: JS API Type Check
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make lib-typecheck
|
||||
|
||||
- name: Decorator Tests
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make decorator-tests
|
||||
|
||||
- name: WebAssembly API Tests (browser)
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make test-wasm-browser
|
||||
|
||||
- name: WebAssembly API Tests (node, Linux)
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make test-wasm-node
|
||||
|
||||
- name: WebAssembly API Tests (node, non-Linux)
|
||||
if: matrix.os != 'ubuntu-latest'
|
||||
run: node scripts/wasm-tests.js
|
||||
|
||||
- name: Sucrase Tests
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make test-sucrase
|
||||
|
||||
- name: Esprima Tests
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make test-esprima
|
||||
|
||||
- name: Preact Splitting Tests
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make test-preact-splitting
|
||||
|
||||
- name: Check the unicode table generator
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: cd scripts && node gen-unicode-table.js
|
||||
|
||||
- name: Yarn PnP tests
|
||||
run: |
|
||||
# Note that Yarn recently deliberately broke "npm install -g yarn".
|
||||
# They say you now have to run "corepack enable" to fix it. They have
|
||||
# written about this here: https://yarnpkg.com/corepack
|
||||
corepack enable
|
||||
|
||||
make test-yarnpnp
|
||||
|
||||
esbuild-old-go-version:
|
||||
name: esbuild CI (old Go version)
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go 1.13 (the minimum required Go version for esbuild)
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: 1.13
|
||||
id: go
|
||||
|
||||
- name: go build
|
||||
run: go build ./cmd/esbuild
|
||||
|
||||
- name: go test
|
||||
run: go test ./internal/...
|
||||
|
||||
esbuild-old-deno-version:
|
||||
name: esbuild CI (old Deno version)
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
# Note: I'm excluding "macos-latest" here because GitHub recently
|
||||
# changed their macOS CI VMs from x86_64 to aarch64 (i.e. from Intel
|
||||
# to ARM) and it looks like old Deno versions have WASM bugs on ARM.
|
||||
# Specifically, this test now crashes like this when run on macOS:
|
||||
#
|
||||
# #
|
||||
# # Fatal error in , line 0
|
||||
# # Check failed: RwxMemoryWriteScope::IsAllowed().
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
# #FailureMessage Object: 0x16f282368
|
||||
# ==== C stack trace ===============================
|
||||
#
|
||||
# 0 deno 0x0000000101bb8e78 v8::base::debug::StackTrace::StackTrace() + 24
|
||||
# 1 deno 0x0000000101bbda84 v8::platform::(anonymous namespace)::PrintStackTrace() + 24
|
||||
# 2 deno 0x0000000101bb6230 V8_Fatal(char const*, ...) + 268
|
||||
# 3 deno 0x000000010227e468 v8::internal::wasm::WasmCodeManager::MemoryProtectionKeysEnabled() const + 0
|
||||
# 4 deno 0x0000000102299994 v8::internal::wasm::WasmEngine::InitializeOncePerProcess() + 44
|
||||
# 5 deno 0x0000000101e78fd0 v8::internal::V8::Initialize() + 1576
|
||||
# 6 deno 0x0000000101c3b7d8 v8::V8::Initialize(int) + 32
|
||||
# 7 deno 0x00000001011833dc _ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17h2bbe74d315ab3e84E + 488
|
||||
# 8 deno 0x00000001017f8854 std::sync::once::Once::call_inner::h70fbdd48fe002a01 + 724
|
||||
# 9 deno 0x000000010115ca80 deno_core::runtime::JsRuntime::new::h9c5f1a9c910f1eed + 192
|
||||
# 10 deno 0x00000001014d3b50 deno_runtime::worker::MainWorker::bootstrap_from_options::h91a0eaac48dfc18e + 4260
|
||||
# 11 deno 0x0000000100ee692c deno::create_main_worker::h0d1622755821ae7f + 1608
|
||||
# 12 deno 0x0000000100f6c688 _ZN97_$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$4poll17h87ddfac9566887c8E + 492
|
||||
# 13 deno 0x0000000100f6ba18 tokio::runtime::task::raw::poll::h7d51f1a7d5a61c15 + 1396
|
||||
# 14 deno 0x0000000101917b98 std::sys_common::backtrace::__rust_begin_short_backtrace::hd384935dcffe6f2d + 332
|
||||
# 15 deno 0x0000000101917954 _ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17he2755732d5d29cf0E + 124
|
||||
# 16 deno 0x0000000101829684 std::sys::unix::thread::Thread::new::thread_start::h432bc30153e41f60 + 48
|
||||
# 17 libsystem_pthread.dylib 0x000000018a436f94 _pthread_start + 136
|
||||
# 18 libsystem_pthread.dylib 0x000000018a431d34 thread_start + 8
|
||||
#
|
||||
# Hopefully running this old Deno version on Linux is sufficiently
|
||||
# close to running it on macOS. For reference, I believe this is the
|
||||
# change that GitHub made which broke this test:
|
||||
# https://github.blog/changelog/2023-10-02-github-actions-apple-silicon-m1-macos-runners-are-now-available-in-public-beta/
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Read go.version (non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $GITHUB_ENV
|
||||
|
||||
- name: Read go.version (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $Env:GITHUB_ENV
|
||||
|
||||
- name: Set up Go ${{ env.GO_VERSION }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
id: go
|
||||
|
||||
# Make sure esbuild works with old versions of Deno. Note: It's important
|
||||
# to test a version before 1.31.0, which introduced the "Deno.Command" API.
|
||||
- name: Setup Deno 1.24.0
|
||||
uses: denoland/setup-deno@main
|
||||
with:
|
||||
deno-version: v1.24.0
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: Deno Tests (non-Windows)
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: make test-deno
|
||||
|
||||
- name: Deno Tests (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: make test-deno-windows
|
||||
@@ -0,0 +1,52 @@
|
||||
name: End-to-end install tests
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 */6 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
# The version of Deno is pinned because version 1.25.1 was causing test
|
||||
# flakes due to random segfaults.
|
||||
- name: Setup Deno 1.24.0
|
||||
uses: denoland/setup-deno@main
|
||||
with:
|
||||
deno-version: v1.24.0
|
||||
|
||||
- name: Test npm
|
||||
run: |
|
||||
npm i -g npm@next-7
|
||||
time make test-e2e-npm
|
||||
|
||||
- name: Test pnpm
|
||||
run: |
|
||||
npm i -g pnpm@next-7
|
||||
time make test-e2e-pnpm
|
||||
|
||||
- name: Test yarn (classic)
|
||||
run: |
|
||||
npm i -g yarn@latest
|
||||
time make test-e2e-yarn
|
||||
|
||||
- name: Test yarn (berry)
|
||||
run: |
|
||||
npm i -g yarn@latest
|
||||
time make test-e2e-yarn-berry
|
||||
|
||||
- name: Test deno
|
||||
run: |
|
||||
time make test-e2e-deno
|
||||
@@ -0,0 +1,89 @@
|
||||
name: Publish
|
||||
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- version.txt
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Read version info
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $GITHUB_ENV
|
||||
echo "ESBUILD_VERSION=$(cat version.txt)" >> $GITHUB_ENV
|
||||
|
||||
# This is here to fail quickly if the release already exists
|
||||
- name: Try to create the "v${{ env.ESBUILD_VERSION }}" tag
|
||||
run: |
|
||||
git fetch --tags
|
||||
git tag "v$ESBUILD_VERSION"
|
||||
|
||||
- name: Extract the release notes
|
||||
run: |
|
||||
CHANGELOG=$(awk -v "ver=$ESBUILD_VERSION" '/^## / { if (p) { exit }; if ($2 == ver) { p=1; next} } p' CHANGELOG.md)
|
||||
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
|
||||
echo "$CHANGELOG" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
# Make sure we'll be able to generate release notes later on below
|
||||
- name: Release notes must not be empty
|
||||
run: |
|
||||
test -n "$CHANGELOG"
|
||||
|
||||
- name: Set up Go ${{ env.GO_VERSION }}
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 24
|
||||
|
||||
# This updates the version in all "package.json" files
|
||||
- name: Build for all platforms
|
||||
run: |
|
||||
git status
|
||||
make platform-all
|
||||
|
||||
# All "package.json" files should have been updated already by running "make platform-all" and committing the results
|
||||
- name: Reject uncommitted/untracked changes
|
||||
run: |
|
||||
git status --porcelain
|
||||
test -z "$(git status --porcelain)"
|
||||
|
||||
# Trusted publishing requires this specific version of npm
|
||||
- name: Install npm
|
||||
run: |
|
||||
npm install -g npm@11.5.1
|
||||
|
||||
- name: Publish packages
|
||||
run: |
|
||||
make publish-all
|
||||
|
||||
- name: Push the tag to GitHub
|
||||
run: |
|
||||
git push origin tag "v$ESBUILD_VERSION"
|
||||
|
||||
# Only do this after publishing was successful
|
||||
- name: Create a GitHub Release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: v${{ env.ESBUILD_VERSION }}
|
||||
release_name: v${{ env.ESBUILD_VERSION }}
|
||||
body: ${{ env.CHANGELOG }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
@@ -0,0 +1,30 @@
|
||||
name: Validate release builds
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['v*']
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Read go.version
|
||||
run: |
|
||||
echo "GO_VERSION=$(cat go.version)" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Go 1.x
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
id: go
|
||||
|
||||
- name: Validation checks
|
||||
run: |
|
||||
make validate-builds
|
||||
Reference in New Issue
Block a user