104 lines
3.4 KiB
YAML
104 lines
3.4 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
|
|
permissions:
|
|
contents: read
|
|
checks: write
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
test:
|
|
name: lint-and-unit-test
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: oven-sh/setup-bun@v1
|
|
with:
|
|
bun-version: 1.3.3
|
|
- uses: actions/cache@v4
|
|
id: cache
|
|
with:
|
|
path: ~/.bun/install/cache
|
|
key: ${{ runner.os }}-${{ matrix.os }}-bun-${{ hashFiles('**/bun.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ matrix.os }}-bun-
|
|
- run: bun install --frozen-lockfile --linker=isolated
|
|
- run: bun run lint
|
|
- name: Run tests
|
|
run: |
|
|
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
|
|
# Run tests with increased timeout on Windows to handle slower file operations
|
|
bun test --timeout=15000 --reporter=junit --reporter-outfile=test-results.xml
|
|
else
|
|
# Run tests with increased timeout to handle Bun shell operations
|
|
bun test --timeout=10000 --reporter=junit --reporter-outfile=test-results.xml
|
|
fi
|
|
shell: bash
|
|
|
|
build-test:
|
|
name: compile-and-smoke-test
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
target: bun-linux-x64-baseline
|
|
- os: macos-latest
|
|
target: bun-darwin-x64
|
|
- os: windows-latest
|
|
target: bun-windows-x64-baseline
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: oven-sh/setup-bun@v1
|
|
with:
|
|
bun-version: 1.3.3
|
|
- uses: actions/cache@v4
|
|
id: cache
|
|
with:
|
|
path: ~/.bun/install/cache
|
|
key: ${{ runner.os }}-${{ matrix.os }}-bun-${{ hashFiles('**/bun.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ matrix.os }}-bun-
|
|
- run: bun install --frozen-lockfile --linker=isolated
|
|
- name: Prime Bun cache for baseline target (Windows workaround)
|
|
if: ${{ contains(matrix.target, 'baseline') && matrix.os == 'windows-latest' }}
|
|
shell: bash
|
|
run: |
|
|
# Workaround for https://github.com/oven-sh/bun/issues/13513
|
|
# Build a dummy project from C:\ to prime the baseline binary cache
|
|
cd /c
|
|
mkdir -p bun-cache-primer
|
|
cd bun-cache-primer
|
|
echo 'console.log("cache primer")' > index.js
|
|
bun build --compile --target=${{ matrix.target }} ./index.js --outfile primer.exe || true
|
|
cd $GITHUB_WORKSPACE
|
|
- name: Build standalone binary
|
|
shell: bash
|
|
run: |
|
|
VER="$(jq -r .version package.json)"
|
|
OUT="backlog-test${{ contains(matrix.target,'windows') && '.exe' || '' }}"
|
|
bun build src/cli.ts \
|
|
--compile --minify --sourcemap \
|
|
--target=${{ matrix.target }} \
|
|
--define __EMBEDDED_VERSION__="\"${VER}\"" \
|
|
--outfile="$OUT"
|
|
- name: Smoke-test binary
|
|
shell: bash
|
|
run: |
|
|
FILE="backlog-test${{ contains(matrix.target,'windows') && '.exe' || '' }}"
|
|
chmod +x "$FILE"
|
|
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
|
|
powershell -command ".\\$FILE --version"
|
|
powershell -command ".\\$FILE --help"
|
|
else
|
|
"./$FILE" --version
|
|
"./$FILE" --help
|
|
fi
|