name: bun-linux env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} TEST_TAG: bun-test' on: push: branches: [main, bun-actions] 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: linux: name: ${{matrix.tag}} runs-on: ${{matrix.runner}} timeout-minutes: 90 strategy: matrix: include: - cpu: haswell tag: linux-x64 arch: x86_64 build_arch: amd64 runner: linux-amd64 webkit_url: "https://github.com/oven-sh/WebKit/releases/download/oct8/bun-webkit-linux-amd64-lto.tar.gz" webkit_basename: "bun-webkit-linux-amd64-lto" - cpu: westmere tag: linux-x64-baseline arch: x86_64 build_arch: amd64 runner: linux-amd64 webkit_url: "https://github.com/oven-sh/WebKit/releases/download/oct8/bun-webkit-linux-amd64-lto.tar.gz" webkit_basename: "bun-webkit-linux-amd64-lto" - cpu: native tag: linux-aarch64 arch: aarch64 build_arch: arm64 runner: linux-arm64 webkit_url: "https://github.com/oven-sh/WebKit/releases/download/oct8/bun-webkit-linux-arm64-lto.tar.gz" webkit_basename: "bun-webkit-linux-arm64-lto" steps: - uses: actions/checkout@v3 - name: Checkout submodules run: git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j $(nproc) - 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 with: context: . push: false cache-from: type=gha cache-to: type=gha,mode=max build-args: | ARCH=${{matrix.arch}} BUILDARCH=${{matrix.build_arch}} CPU_TARGET=${{matrix.cpu}} WEBKIT_URL=${{matrix.webkit_url}} GIT_SHA=${{github.sha}} WEBKIT_BASENAME=${{matrix.webkit_basename}} platforms: linux/${{matrix.build_arch}} target: artifact outputs: type=local,dest=${{runner.temp}}/release - name: Zip 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}} - uses: actions/upload-artifact@v3 with: name: bun-${{matrix.tag}}-profile path: ${{runner.temp}}/release/bun-${{matrix.tag}}-profile.zip - uses: actions/upload-artifact@v3 with: name: bun-${{matrix.tag}} path: ${{runner.temp}}/release/bun-${{matrix.tag}}.zip - name: Release id: release uses: softprops/action-gh-release@v1 if: github.ref == 'refs/heads/main' with: prerelease: true generate_release_notes: true body: "This is the canary release of Bun that corresponds to the commit [${{ github.sha }}]" name: "Canary (${{github.sha}})" tag_name: "canary" files: | ${{runner.temp}}/release/bun-${{matrix.tag}}.zip ${{runner.temp}}/release/bun-${{matrix.tag}}-profile.zip - uses: actions/upload-artifact@v3 with: name: bun-obj-${{matrix.tag}} path: ${{runner.temp}}/release/bun-obj - uses: actions/upload-artifact@v3 with: name: ${{matrix.tag}}-dependencies path: ${{runner.temp}}/release/bun-dependencies