ensure .bin
folder is created before linking binaries (#7166)
#1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: bun-windows-x64 | |
concurrency: | |
group: bun-windows-x64-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
# note: in other files, this version is only the major version, but for windows it is the full version | |
LLVM_VERSION: 16.0.6 | |
BUN_DOWNLOAD_URL_BASE: https://pub-5e11e972747a44bf9aaf9394f185a982.r2.dev/releases/latest | |
cpu: native | |
arch: x86_64 | |
tag: bun-windows-x64 | |
# TODO: wire this up to workflow_dispatch. | |
# github's expression syntax makes this hard to set a default to true | |
canary: true | |
on: | |
push: | |
branches: [main] | |
paths: | |
- "src/**/*" | |
- "test/**/*" | |
- "packages/bun-usockets/src/**/*" | |
- "build.zig" | |
- "Makefile" | |
- "Dockerfile" | |
pull_request: | |
branches: [main] | |
paths: | |
- "src/**/*" | |
- "test/**/*" | |
- "packages/bun-usockets/src/**/*" | |
- "build.zig" | |
- "Makefile" | |
- "Dockerfile" | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
# inputs: | |
# is-canary: | |
# type: boolean | |
# description: Is Canary Build? | |
# default: true | |
jobs: | |
windows-zig: | |
name: Zig Build | |
runs-on: med-ubuntu | |
timeout-minutes: 60 | |
if: github.repository_owner == 'oven-sh' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
id: buildx | |
with: | |
install: true | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Calculate Canary Revision | |
if: ${{ env.canary == 'true' }} | |
id: canary | |
run: | | |
echo "canary_revision=$(GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" bash ./scripts/calculate-canary-revision.sh --raw)" >> $GITHUB_OUTPUT | |
- name: Compile Zig Object | |
uses: docker/build-push-action@v3 | |
if: runner.arch == 'X64' | |
with: | |
context: . | |
push: false | |
# This doesnt seem to work | |
# cache-from: type=s3,endpoint_url=${{ secrets.CACHE_S3_ENDPOINT }},blobs_prefix=docker_blobs/,manifests_prefix=docker_manifests/,access_key_id=${{ secrets.CACHE_S3_ACCESS_KEY_ID }},secret_access_key=${{ secrets.CACHE_S3_SECRET_ACCESS_KEY }},bucket=bun,region=auto | |
# cache-to: type=s3,endpoint_url=${{ secrets.CACHE_S3_ENDPOINT }},blobs_prefix=docker_blobs/,manifests_prefix=docker_manifests/,access_key_id=${{ secrets.CACHE_S3_ACCESS_KEY_ID }},secret_access_key=${{ secrets.CACHE_S3_SECRET_ACCESS_KEY }},bucket=bun,region=auto | |
build-args: | | |
BUILDARCH=${{ runner.arch == 'X64' && 'amd64' || 'arm64' }} | |
BUILD_MACHINE_ARCH=${{ runner.arch == 'X64' && 'x86_64' || 'aarch64' }} | |
ARCH=${{ env.arch }} | |
CPU_TARGET=${{ env.cpu }} | |
TRIPLET=${{ env.arch }}-windows-msvc | |
GIT_SHA=${{ github.sha }} | |
CANARY=${{ env.canary == 'true' && steps.canary.outputs.canary_revision || '0' }} | |
platforms: linux/${{ runner.arch == 'X64' && 'amd64' || 'arm64' }} | |
target: build_release_obj | |
outputs: type=local,dest=${{runner.temp}}/release | |
- name: Upload Zig Object | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.tag }}-zig | |
path: ${{runner.temp}}/release/bun-zig.o | |
windows-dependencies: | |
name: Dependencies | |
runs-on: windows | |
timeout-minutes: 60 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Clone Submodules | |
run: .\scripts\update-submodules.ps1 | |
- name: Hash submodule versions | |
shell: pwsh | |
run: | | |
$data = "$(& { | |
git submodule | Where-Object { $_ -notmatch 'WebKit' } | |
clang --version | |
rustc --version | |
Get-Content -Path (Get-ChildItem -Path 'scripts/build*.sh', 'scripts/all-dependencies.sh' | Sort-Object -Property Name).FullName | Out-String | |
})" | |
$hash = ( -join ((New-Object -TypeName System.Security.Cryptography.SHA1CryptoServiceProvider).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($data)) | ForEach-Object { $_.ToString("x2") } )).Substring(0, 10) | |
echo "sha=${hash}" >> $env:GITHUB_OUTPUT | |
id: submodule-versions | |
- name: Try fetch dependencies | |
id: cache-deps-restore | |
uses: actions/cache/restore@v3 | |
with: | |
path: bun-deps | |
key: bun-deps-${{ env.tag }}-${{ steps.submodule-versions.outputs.sha }} | |
- name: Install LLVM ${{ env.LLVM_VERSION }} | |
if: ${{ !steps.cache-deps-restore.outputs.cache-hit }} | |
uses: KyleMayes/install-llvm-action@1a3da29f56261a1e1f937ec88f0856a9b8321d7e | |
with: | |
version: ${{ env.LLVM_VERSION }} | |
- name: Install Ninja | |
if: ${{ !steps.cache-deps-restore.outputs.cache-hit }} | |
run: choco install -y ninja | |
- name: Build Dependencies | |
if: ${{ !steps.cache-deps-restore.outputs.cache-hit }} | |
run: | | |
.\scripts\env.ps1 | |
Invoke-WebRequest -Uri "https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-2.16.01-win64.zip" -OutFile nasm.zip | |
Expand-Archive nasm.zip (mkdir -Force "nasm") | |
$Nasm = (Get-ChildItem "nasm") | |
$env:Path += ";${Nasm}" | |
$env:BUN_DEPS_OUT_DIR = (mkdir -Force "./bun-deps") | |
.\scripts\all-dependencies.ps1 | |
- name: Upload Dependencies | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.tag }}-deps | |
path: bun-deps/ | |
- name: Cache Dependencies | |
if: ${{ !steps.cache-deps-restore.outputs.cache-hit }} | |
id: cache-deps-save | |
uses: actions/cache/save@v3 | |
with: | |
path: bun-deps | |
key: ${{ steps.cache-deps-restore.outputs.cache-primary-key }} | |
windows-codegen: | |
name: Codegen | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
if: github.repository_owner == 'oven-sh' | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
curl -fsSL $BUN_DOWNLOAD_URL_BASE/bun-linux-x64.zip > bun.zip | |
unzip bun.zip | |
export PATH="$PWD/bun-linux-x64:$PATH" | |
./scripts/cross-compile-codegen.sh win32 x64 | |
# Sort of a hack to do this step in the codegen stage | |
- name: Calculate Canary Revision | |
if: ${{ env.canary == 'true' }} | |
run: | | |
echo "canary_revision=$(GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" bash ./scripts/calculate-canary-revision.sh --raw)" > build-codegen-win32-x64/.canary_revision | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.tag }}-codegen | |
path: build-codegen-win32-x64/ | |
windows-cpp: | |
name: C++ Build | |
needs: [windows-codegen] | |
runs-on: windows | |
if: github.repository_owner == 'oven-sh' | |
timeout-minutes: 90 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: KyleMayes/install-llvm-action@1a3da29f56261a1e1f937ec88f0856a9b8321d7e | |
with: | |
version: ${{ env.LLVM_VERSION }} | |
- run: choco install -y ninja | |
- name: Download Codegen | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.tag }}-codegen | |
path: build | |
- name: Build C++ | |
run: | | |
# Using SCCache is blocked by | |
# https://github.com/mozilla/sccache/issues/1843 | |
# https://github.com/mozilla/sccache/pull/1856 | |
# $sczip = "sccache-v0.6.0-x86_64-pc-windows-msvc" | |
# Invoke-WebRequest -Uri "https://github.com/mozilla/sccache/releases/download/v0.6.0/${sczip}.zip" -OutFile "${sczip}.zip" | |
# Expand-Archive "${sczip}.zip" | |
# $env:SCCACHE_BUCKET="bun" | |
# $env:SCCACHE_REGION="auto" | |
# $env:SCCACHE_S3_USE_SSL="true" | |
# $env:SCCACHE_ENDPOINT="${{ secrets.CACHE_S3_ENDPOINT }}" | |
# $env:AWS_ACCESS_KEY_ID="${{ secrets.CACHE_S3_ACCESS_KEY_ID }}" | |
# $env:AWS_SECRET_ACCESS_KEY="${{ secrets.CACHE_S3_SECRET_ACCESS_KEY }}" | |
# $SCCACHE="$PWD/${sczip}/${sczip}/sccache.exe" | |
$CANARY_REVISION = if (Test-Path build/.canary_revision) { Get-Content build/.canary_revision } else { "0" } | |
.\scripts\env.ps1 | |
.\scripts\update-submodules.ps1 | |
.\scripts\build-libuv.ps1 -CloneOnly $True | |
cd build | |
# "-DCCACHE_PROGRAM=${SCCACHE}" | |
# TODO(@paperdave): pass the proper revision of canary here. without it, | |
# the properties window will display the wrong version. | |
# not really a big deal for time being. should be resolved before release | |
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release ` | |
-DNO_CODEGEN=1 ` | |
-DNO_CONFIGURE_DEPENDS=1 ` | |
"-DCANARY=${CANARY_REVISION}" ` | |
-DBUN_CPP_ONLY=1 | |
if ($LASTEXITCODE -ne 0) { throw "CMake configuration failed" } | |
.\compile-cpp-only.ps1 -v | |
if ($LASTEXITCODE -ne 0) { throw "C++ compilation failed" } | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.tag }}-cpp | |
path: build/bun-cpp-objects.a | |
windows-link: | |
name: Link | |
needs: [windows-dependencies, windows-codegen, windows-cpp, windows-zig] | |
runs-on: windows-latest | |
if: github.repository_owner == 'oven-sh' | |
timeout-minutes: 30 | |
permissions: write-all | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: KyleMayes/install-llvm-action@1a3da29f56261a1e1f937ec88f0856a9b8321d7e | |
with: | |
version: ${{ env.LLVM_VERSION }} | |
- run: choco install -y ninja | |
- name: Download Codegen | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.tag }}-codegen | |
path: build | |
- name: Download Dependencies | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.tag }}-deps | |
path: bun-deps | |
- name: Download Zig Object | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.tag }}-zig | |
path: bun-zig | |
- name: Download C++ Objects | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ env.tag }}-cpp | |
path: bun-cpp | |
- name: Link | |
run: | | |
.\scripts\update-submodules.ps1 | |
.\scripts\env.ps1 | |
Set-Location build | |
$CANARY_REVISION = if (Test-Path build/.canary_revision) { Get-Content build/.canary_revision } else { "0" } | |
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release ` | |
-DNO_CODEGEN=1 ` | |
-DNO_CONFIGURE_DEPENDS=1 ` | |
"-DCANARY=${CANARY_REVISION}" ` | |
-DBUN_LINK_ONLY=1 ` | |
"-DBUN_DEPS_OUT_DIR=$(Resolve-Path ../bun-deps)" ` | |
"-DBUN_CPP_ARCHIVE=$(Resolve-Path ../bun-cpp/bun-cpp-objects.a)" ` | |
"-DBUN_ZIG_OBJ=$(Resolve-Path ../bun-zig/bun-zig.o)" | |
if ($LASTEXITCODE -ne 0) { throw "CMake configuration failed" } | |
ninja -v | |
if ($LASTEXITCODE -ne 0) { throw "Link failed!" } | |
- name: Package | |
run: | | |
$Dist = mkdir -Force "${{ env.tag }}" | |
cp -r build\bun.exe "$Dist\bun.exe" | |
Compress-Archive $Dist ${{ env.tag }}.zip | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.tag }} | |
path: ${{ env.tag }}.zip | |
- name: Release | |
id: release | |
uses: ncipollo/release-action@v1 | |
if: | | |
github.repository_owner == 'oven-sh' | |
&& github.ref == 'refs/heads/main' | |
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: "${{env.tag}}.zip" | |
- uses: sarisia/actions-status-discord@v1 | |
if: failure() && github.repository_owner == 'oven-sh' && github.event_name == 'pull_request' | |
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 ${{ env.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}}) |