name: bun-macOS-x64-baseline env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} TEST_TAG: bun-test' on: push: branches: [main] paths: - "src/**/*" - "test/**/*" - "build.zig" - "Makefile" - "Dockerfile" pull_request: branches: [main] paths: - "src/**/*" - "test/**/*" - "build.zig" - "Makefile" - "Dockerfile" # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: macos-object-files: name: macOS Object runs-on: med-ubuntu strategy: matrix: include: - cpu: nehalem arch: x86_64 tag: bun-obj-darwin-x64-baseline # - cpu: haswell # arch: x86_64 # tag: bun-obj-darwin-x64 # - cpu: native # arch: aarch64 # tag: bun-obj-darwin-aarch64 steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: docker/setup-buildx-action@v2 id: buildx with: install: true - name: Run run: | rm -rf ${{runner.temp}}/release - name: Login to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v3 if: runner.arch == 'X64' with: context: . push: false cache-from: type=gha cache-to: type=gha,mode=min build-args: | ARCH=${{ matrix.arch }} BUILDARCH=amd64 BUILD_MACHINE_ARCH=x86_64 CPU_TARGET=${{ matrix.cpu }} TRIPLET=${{matrix.arch}}-macos-none GIT_SHA=${{github.sha}} platforms: linux/amd64 target: build_release_obj outputs: type=local,dest=${{runner.temp}}/release - name: Build and push uses: docker/build-push-action@v3 if: runner.arch == 'ARM64' with: context: . push: false cache-from: type=gha cache-to: type=gha,mode=min build-args: | ARCH=${{ matrix.arch }} BUILDARCH=arm64 BUILD_MACHINE_ARCH=aarch64 CPU_TARGET=${{ matrix.cpu }} TRIPLET=${{matrix.arch}}-macos-none GIT_SHA=${{github.sha}} platforms: linux/arm64 target: build_release_obj outputs: type=local,dest=${{runner.temp}}/release - uses: actions/upload-artifact@v3 with: name: ${{ matrix.tag }} path: ${{runner.temp}}/release/bun.o macOS-cpp: name: macOS C++ runs-on: ${{ matrix.runner }} timeout-minutes: 90 strategy: matrix: include: - cpu: nehalem arch: x86_64 tag: bun-darwin-x64-baseline obj: bun-obj-darwin-x64-baseline runner: macos-11 artifact: bun-obj-darwin-x64-baseline webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" dependencies: true compile_obj: false # - cpu: haswell # arch: x86_64 # tag: bun-darwin-x64 # obj: bun-obj-darwin-x64 # runner: macos-11 # artifact: bun-obj-darwin-x64 # webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" # dependencies: true # compile_obj: false - cpu: nehalem arch: x86_64 tag: bun-darwin-x64-baseline obj: bun-obj-darwin-x64-baseline runner: macos-11 artifact: bun-obj-darwin-x64-baseline webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" dependencies: false compile_obj: true # - cpu: haswell # arch: x86_64 # tag: bun-darwin-x64 # obj: bun-obj-darwin-x64 # runner: macos-11 # artifact: bun-obj-darwin-x64 # webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" # dependencies: false # compile_obj: true # - cpu: native # arch: aarch64 # tag: bun-darwin-aarch64 # obj: bun-obj-darwin-aarch64 # artifact: bun-obj-darwin-aarch64 # webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" # runner: macos-arm64 # dependencies: true # compile_obj: true steps: - uses: actions/checkout@v3 - name: Checkout submodules run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) - name: Install dependencies env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 HOMEBREW_NO_AUTO_UPDATE: 1 HOMEBREW_NO_INSTALL_CLEANUP: 1 BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps run: | brew install ccache rust llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force echo "export PATH=$(brew --prefix ccache)/bin:\$PATH" >> $GITHUB_ENV echo "export PATH=$(brew --prefix coreutils)/libexec/gnubin:\$PATH" >> $GITHUB_ENV echo "export PATH=$(brew --prefix llvm@15)/bin:\$PATH" >> $GITHUB_ENV brew link --overwrite llvm@15 - name: ccache (dependencies) uses: hendrikmuhs/ccache-action@v1.2 if: matrix.dependencies with: key: ${{ runner.os }}-ccache-${{ matrix.tag }}-dependencies restore-keys: ${{ runner.os }}-ccache-${{ matrix.tag }}-dependencies - name: ccache (c++) uses: hendrikmuhs/ccache-action@v1.2 if: matrix.compile_obj with: key: ${{ runner.os }}-ccache-${{ matrix.tag }}-obj restore-keys: ${{ runner.os }}-ccache-${{ matrix.tag }}-obj - name: Download WebKit if: matrix.compile_obj env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps run: | rm -rf $JSC_BASE_DIR mkdir -p $JSC_BASE_DIR curl -L ${{ matrix.webkit_url }} | tar -xz -C $JSC_BASE_DIR --strip-components=1 - name: Compile dependencies if: matrix.dependencies env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps WEBKIT_RELEASE_DIR: ${{ runner.temp }}/bun-webkit WEBKIT_RELEASE_DIR_LTO: ${{ runner.temp }}/bun-webkit run: | mkdir -p $OBJ_DIR $BUN_DEPS_OUT_DIR make vendor-without-check - name: Compile C++ if: matrix.compile_obj env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps WEBKIT_RELEASE_DIR: ${{ runner.temp }}/bun-webkit WEBKIT_RELEASE_DIR_LTO: ${{ runner.temp }}/bun-webkit run: | mkdir -p $OBJ_DIR $BUN_DEPS_OUT_DIR make -j $(sysctl -n hw.ncpu) release-bindings - name: Upload C++ if: matrix.compile_obj uses: actions/upload-artifact@v3 with: name: ${{ matrix.tag }}-cpp path: ${{ runner.temp }}/bun-cpp-obj - name: Upload Dependencies if: matrix.dependencies uses: actions/upload-artifact@v3 with: name: ${{ matrix.tag }}-deps path: ${{runner.temp}}/bun-deps macOS: name: macOS Link runs-on: ${{ matrix.runner }} needs: [macOS-cpp, macos-object-files] timeout-minutes: 90 strategy: matrix: include: - cpu: nehalem arch: x86_64 tag: bun-darwin-x64-baseline obj: bun-obj-darwin-x64-baseline package: bun-darwin-x64 runner: macos-11 artifact: bun-obj-darwin-x64-baseline webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" # - cpu: haswell # arch: x86_64 # tag: bun-darwin-x64 # obj: bun-obj-darwin-x64 # package: bun-darwin-x64 # runner: macos-11 # artifact: bun-obj-darwin-x64 # webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" # - cpu: native # arch: aarch64 # tag: bun-darwin-aarch64 # obj: bun-obj-darwin-aarch64 # package: bun-darwin-aarch64 # artifact: bun-obj-darwin-aarch64 # webkit_url: "https://github.com/oven-sh/WebKit/releases/download/may20/bun-webkit-macos-amd64-lto.tar.gz" # runner: macos-arm64 steps: - uses: actions/checkout@v3 - name: Checkout submodules run: git submodule update --init --recursive --depth=1 --progress -j $(sysctl -n hw.ncpu) - name: Install dependencies env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 HOMEBREW_NO_AUTO_UPDATE: 1 HOMEBREW_NO_INSTALL_CLEANUP: 1 BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps run: | brew install ccache rust llvm@15 pkg-config coreutils libtool cmake libiconv automake openssl@1.1 ninja gnu-sed pkg-config esbuild --force echo "export PATH=$(brew --prefix coreutils)/libexec/gnubin:\$PATH" >> $GITHUB_ENV echo "export PATH=$(brew --prefix llvm@15)/bin:\$PATH" >> $GITHUB_ENV brew link --overwrite llvm@15 - name: ccache (link) uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ runner.os }}-ccache-${{ matrix.tag }}-link restore-keys: ${{ runner.os }}-ccache-${{ matrix.tag }}-link - name: Download WebKit env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps BUN_RELEASE_DIR: ${{ runner.temp }}/release WEBKIT_RELEASE_DIR: ${{ runner.temp }}/bun-webkit WEBKIT_RELEASE_DIR_LTO: ${{ runner.temp }}/bun-webkit run: | rm -rf $JSC_BASE_DIR mkdir -p $JSC_BASE_DIR curl -L ${{ matrix.webkit_url }} | tar -xz -C $JSC_BASE_DIR --strip-components=1 - name: Download C++ uses: actions/download-artifact@v3 with: name: ${{ matrix.tag }}-cpp path: ${{ runner.temp }}/bun-cpp-obj - name: Download Dependencies uses: actions/download-artifact@v3 with: name: ${{ matrix.tag }}-deps path: ${{ runner.temp }}/bun-deps - name: Download Object uses: actions/download-artifact@v3 with: name: ${{ matrix.obj }} path: ${{ runner.temp }}/release - name: Link env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps BUN_RELEASE_DIR: ${{ runner.temp }}/release WEBKIT_RELEASE_DIR: ${{ runner.temp }}/bun-webkit WEBKIT_RELEASE_DIR_LTO: ${{ runner.temp }}/bun-webkit run: | rm -rf packages/${{ matrix.package }} mkdir -p packages/${{ matrix.package }} mv ${{ runner.temp }}/release/* packages/${{ matrix.package }}/ make bun-link-lld-release copy-to-bun-release-dir-bin - name: Zip env: CPU_TARGET: ${{ matrix.cpu }} JSC_BASE_DIR: ${{ runner.temp }}/bun-webkit JSC_LIB: ${{ runner.temp }}/bun-webkit/lib BUN_DEPLOY_DIR: ${{ runner.temp }}/release/bun OBJ_DIR: ${{ runner.temp }}/bun-cpp-obj BUN_DEPS_OUT_DIR: ${{runner.temp}}/bun-deps BUN_RELEASE_DIR: ${{ runner.temp }}/release WEBKIT_RELEASE_DIR: ${{ runner.temp }}/bun-webkit WEBKIT_RELEASE_DIR_LTO: ${{ runner.temp }}/bun-webkit run: | cd ${{runner.temp}}/release chmod +x bun-profile bun mkdir ${{matrix.tag}}-profile mkdir ${{matrix.tag}} /usr/bin/strip -S bun mv bun-profile ${{matrix.tag}}-profile/bun-profile mv bun ${{matrix.tag}}/bun zip -r ${{matrix.tag}}-profile.zip ${{matrix.tag}}-profile zip -r ${{matrix.tag}}.zip ${{matrix.tag}} - uses: actions/upload-artifact@v3 with: name: ${{matrix.tag}}-profile path: ${{runner.temp}}/release/${{matrix.tag}}-profile.zip - uses: actions/upload-artifact@v3 with: name: ${{matrix.tag}} path: ${{runner.temp}}/release/${{matrix.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: "${{runner.temp}}/release/${{matrix.tag}}.zip,${{runner.temp}}/release/${{matrix.tag}}-profile.zip" macOS-test: name: Tests ${{matrix.tag}} runs-on: ${{ matrix.runner }} needs: [macOS] if: github.event_name == 'pull_request' timeout-minutes: 30 outputs: failing_tests: ${{ steps.test.outputs.failing_tests }} failing_tests_count: ${{ steps.test.outputs.failing_tests_count }} strategy: fail-fast: false matrix: include: - tag: bun-darwin-x64-baseline runner: macos-11 steps: - id: checkout name: Checkout uses: actions/checkout@v3 with: submodules: false - id: download name: Download uses: actions/download-artifact@v3 with: name: ${{matrix.tag}} path: ${{runner.temp}}/release - id: install name: Install run: | cd ${{runner.temp}}/release unzip ${{matrix.tag}}.zip cd ${{matrix.tag}} chmod +x bun sudo mv bun /usr/local/bin/bun bun --version - id: test name: Test (node runner) # if: ${{github.event.inputs.use_bun == 'false'}} run: | bun install bun install --cwd test bun install --cwd packages/bun-internal-test node packages/bun-internal-test/src/runner.node.mjs || true - name: Comment on PR 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}})** [#${{github.sha}}](https://github.com/oven-sh/bun/commits/${{github.sha}}) - name: Uncomment on PR 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. [#${{github.sha}}](https://github.com/oven-sh/bun/commits/${{github.sha}}) - id: fail name: Fail the build if: steps.test.outputs.failing_tests != '' run: exit 1