mirror of
https://github.com/oven-sh/bun
synced 2026-02-17 06:12:08 +00:00
289 lines
10 KiB
YAML
289 lines
10 KiB
YAML
name: bun-linux
|
|
|
|
concurrency:
|
|
group: bun-linux-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- ci-*
|
|
paths:
|
|
- "src/**/*"
|
|
- "test/**/*"
|
|
- "packages/bun-usockets/src/**/*"
|
|
- "build.zig"
|
|
- "Makefile"
|
|
- "Dockerfile"
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- ci-*
|
|
paths:
|
|
- "src/**/*"
|
|
- "test/**/*"
|
|
- "packages/bun-usockets/src/**/*"
|
|
- "build.zig"
|
|
- "Makefile"
|
|
- "Dockerfile"
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
GITHUB_RUNNER: ubuntu-22.04
|
|
X64_RUNNER: big-ubuntu
|
|
ARM64_RUNNER: linux-arm64
|
|
|
|
jobs:
|
|
build:
|
|
name: Build ${{ matrix.tag }}
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 90
|
|
permissions: write-all
|
|
continue-on-error: true
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- tag: linux-x64
|
|
arch: x86_64
|
|
build-arch: amd64
|
|
build-machine-arch: x86_64
|
|
cpu: haswell
|
|
runnner: ${{ github.repository_owner == 'oven-sh' && vars.X64_RUNNER || vars.GITHUB_RUNNER }}
|
|
- tag: linux-x64-baseline
|
|
arch: x86_64
|
|
build-arch: amd64
|
|
build-machine-arch: x86_64
|
|
cpu: nehalem
|
|
runner: ${{ github.repository_owner == 'oven-sh' && vars.X64_RUNNER || vars.GITHUB_RUNNER }}
|
|
- tag: linux-aarch64
|
|
arch: aarch64
|
|
build-arch: arm64
|
|
build-machine-arch: aarch64
|
|
cpu: armv8
|
|
runner: ${{ github.repository_owner == 'oven-sh' && vars.ARM64_RUNNER || vars.GITHUB_RUNNER }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
- name: Setup Emulation
|
|
if: ${{ matrix.build-arch == 'arm64' && runner.arch != 'ARM64' }}
|
|
uses: docker/setup-qemu-action@v3
|
|
with:
|
|
platforms: arm64
|
|
- name: Setup Docker
|
|
uses: docker/setup-buildx-action@v3
|
|
with:
|
|
install: true
|
|
- name: Login to Docker
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Prepare Cache
|
|
run: |
|
|
rm -rf ${{ runner.temp }}/release
|
|
mkdir -p ${{ runner.temp }}/.buildx-cache-${{ matrix.tag }}
|
|
- name: Build
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
push: false
|
|
target: artifact
|
|
platforms: linux/${{ matrix.build-arch }}
|
|
cache-from: type=local,src=${{ runner.temp }}/.buildx-cache-${{ matrix.tag }}
|
|
cache-to: type=local,dest=${{ runner.temp }}/.buildx-cache-${{ matrix.tag }}
|
|
outputs: type=local,dest=${{ runner.temp }}/release
|
|
build-args: |
|
|
ARCH=${{ matrix.arch }}
|
|
BUILDARCH=${{ matrix.build-arch }}
|
|
BUILD_MACHINE_ARCH=${{ matrix.build-machine-arch }}
|
|
CPU_TARGET=${{ matrix.cpu }}
|
|
GIT_SHA=${{ github.sha }}
|
|
SCCACHE_BUCKET=bun
|
|
SCCACHE_REGION=auto
|
|
SCCACHE_S3_USE_SSL=true
|
|
SCCACHE_ENDPOINT=${{ secrets.CACHE_S3_ENDPOINT }}
|
|
AWS_ACCESS_KEY_ID=${{ secrets.CACHE_S3_ACCESS_KEY_ID }}
|
|
AWS_SECRET_ACCESS_KEY=${{ secrets.CACHE_S3_SECRET_ACCESS_KEY }}
|
|
- name: Prepare Artifacts
|
|
run: |
|
|
# if zip is not found
|
|
if [ ! -x "$(command -v zip)" ]; then
|
|
sudo apt-get update && sudo apt-get install -y zip --no-install-recommends
|
|
fi
|
|
|
|
if [ ! -x "$(command -v strip)" ]; then
|
|
sudo apt-get update && sudo apt-get install -y binutils --no-install-recommends
|
|
fi
|
|
|
|
cd ${{ runner.temp }}/release
|
|
chmod +x bun-profile bun
|
|
|
|
mkdir bun-${{ matrix.tag }}-profile
|
|
mkdir bun-${{ matrix.tag }}
|
|
|
|
strip bun
|
|
|
|
mv bun-profile bun-${{ matrix.tag }}-profile/bun-profile
|
|
mv bun bun-${{ matrix.tag }}/bun
|
|
|
|
zip -r bun-${{ matrix.tag }}-profile.zip bun-${{ matrix.tag }}-profile
|
|
zip -r bun-${{ matrix.tag }}.zip bun-${{ matrix.tag }}
|
|
- name: Upload bun-profile
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bun-${{ matrix.tag }}-profile
|
|
path: ${{ runner.temp }}/release/bun-${{ matrix.tag }}-profile.zip
|
|
- name: Upload bun
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bun-${{ matrix.tag }}
|
|
path: ${{ runner.temp }}/release/bun-${{ matrix.tag }}.zip
|
|
- name: Upload bun-obj
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bun-obj-${{ matrix.tag }}
|
|
path: ${{ runner.temp }}/release/bun-obj
|
|
- name: Upload bun-dependencies
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{ matrix.tag }}-dependencies
|
|
path: ${{ runner.temp }}/release/bun-dependencies
|
|
- name: Release
|
|
if: ${{ github.repository_owner == 'oven-sh' && github.ref == 'refs/heads/main' }}
|
|
uses: ncipollo/release-action@v1
|
|
with:
|
|
prerelease: true
|
|
body: "This canary release of Bun corresponds to the commit [${{ github.sha }}]"
|
|
allowUpdates: true
|
|
replacesArtifacts: true
|
|
generateReleaseNotes: true
|
|
artifactErrorsFailBuild: true
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
name: "Canary (${{ github.sha }})"
|
|
tag: "canary"
|
|
artifacts: "${{ runner.temp }}/release/bun-${{ matrix.tag }}.zip,${{ runner.temp }}/release/bun-${{ matrix.tag }}-profile.zip"
|
|
- name: Send Discord Message
|
|
if: ${{ failure() && github.repository_owner == 'oven-sh' && github.event_name == 'pull_request' }}
|
|
uses: sarisia/actions-status-discord@v1
|
|
with:
|
|
title: ""
|
|
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
|
status: ${{ job.status }}
|
|
noprefix: true
|
|
nocontext: true
|
|
description: |
|
|
Pull Request
|
|
### [${{ github.event.pull_request.title }}](https://github.com/oven-sh/bun/pull/${{ github.event.number }})
|
|
|
|
@${{ github.actor }}
|
|
|
|
Build failed on ${{ matrix.tag }}:
|
|
|
|
**[View build output](https://github.com/oven-sh/bun/actions/runs/${{ github.run_id }})**
|
|
|
|
[Commit ${{github.sha}}](https://github.com/oven-sh/bun/commits/${{ github.sha }})
|
|
test:
|
|
name: Test ${{ matrix.tag }}
|
|
needs: [build]
|
|
runs-on: ${{ github.repository_owner == 'oven-sh' && matrix.runner == 'ARM64' && vars.ARM64_RUNNER || vars.GITHUB_RUNNER }}
|
|
timeout-minutes: 20
|
|
permissions:
|
|
pull-requests: write
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- tag: linux-x64
|
|
arch: X64
|
|
- tag: linux-x64-baseline
|
|
arch: X64
|
|
- tag: linux-aarch64
|
|
arch: ARM64
|
|
outputs:
|
|
failing_tests: ${{ steps.test.outputs.failing_tests }}
|
|
failing_tests_count: ${{ steps.test.outputs.failing_tests_count }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: false
|
|
- name: Download Artifact
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: bun-${{ matrix.tag }}
|
|
path: ${{runner.temp}}/release
|
|
- name: Prepare Artifact
|
|
run: |
|
|
cd ${{ runner.temp }}/release
|
|
unzip bun-${{ matrix.tag }}.zip
|
|
cd bun-${{ matrix.tag }}
|
|
chmod +x bun
|
|
./bun --version
|
|
pwd >> $GITHUB_PATH
|
|
- name: Install Dependencies
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install -y openssl
|
|
bun install --verbose
|
|
bun install --cwd=test --verbose
|
|
bun install --cwd=packages/bun-internal-test --verbose
|
|
- id: test
|
|
name: Test
|
|
if: ${{ runner.arch == matrix.arch }}
|
|
env:
|
|
SMTP_SENDGRID_SENDER: ${{ secrets.SMTP_SENDGRID_SENDER }}
|
|
TLS_MONGODB_DATABASE_URL: ${{ secrets.TLS_MONGODB_DATABASE_URL }}
|
|
TLS_POSTGRES_DATABASE_URL: ${{ secrets.TLS_POSTGRES_DATABASE_URL }}
|
|
run: |
|
|
node packages/bun-internal-test/src/runner.node.mjs || true
|
|
- name: Send Discord Message
|
|
if: ${{ always() && steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request' }}
|
|
uses: sarisia/actions-status-discord@v1
|
|
with:
|
|
title: ""
|
|
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
|
status: "failure"
|
|
noprefix: true
|
|
nocontext: true
|
|
description: |
|
|
Pull Request
|
|
### ❌ [${{ github.event.pull_request.title }}](https://github.com/oven-sh/bun/pull/${{ github.event.number }})
|
|
|
|
@${{ github.actor }}, there are ${{ steps.test.outputs.failing_tests_count }} files with test failures on ${{ matrix.tag }}:
|
|
|
|
${{ steps.test.outputs.failing_tests }}
|
|
|
|
**[View test output](https://github.com/oven-sh/bun/actions/runs/${{ github.run_id }})**
|
|
- name: Comment on Pull Request
|
|
if: ${{ steps.test.outputs.failing_tests != '' && github.event_name == 'pull_request' }}
|
|
uses: thollander/actions-comment-pull-request@v2
|
|
with:
|
|
comment_tag: test-failures-${{ matrix.tag }}
|
|
message: |
|
|
❌ @${{ github.actor }} ${{ steps.test.outputs.failing_tests_count }} files with test failures on ${{ matrix.tag }}:
|
|
|
|
${{ steps.test.outputs.failing_tests }}
|
|
|
|
**[View test output](https://github.com/oven-sh/bun/actions/runs/${{ github.run_id }})**
|
|
|
|
<sup>[#${{github.sha}}](https://github.com/oven-sh/bun/commits/${{ github.sha }})</sup>
|
|
- name: Uncomment on Pull Request
|
|
if: ${{ steps.test.outputs.failing_tests == '' && github.event_name == 'pull_request' }}
|
|
uses: thollander/actions-comment-pull-request@v2
|
|
with:
|
|
comment_tag: test-failures-${{ matrix.tag }}
|
|
mode: upsert
|
|
create_if_not_exists: false
|
|
message: |
|
|
✅ test failures on ${{ matrix.tag }} have been resolved.
|
|
|
|
<sup>[#${{ github.sha }}](https://github.com/oven-sh/bun/commits/${{ github.sha }})</sup>
|
|
- name: Done
|
|
if: ${{ steps.test.outputs.failing_tests != '' }}
|
|
run: |
|
|
exit 1
|