Alternative approach, we use rusty_v8 for all platforms that its predefined, but lets build from source a musl v8 version with bazel for x86 and aarch64 only. We would need to release this on github and then use the release.
188 lines
5.4 KiB
YAML
188 lines
5.4 KiB
YAML
name: rusty-v8-release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
release_tag:
|
|
description: Optional release tag. Defaults to rusty-v8-v<resolved_v8_version>.
|
|
required: false
|
|
type: string
|
|
publish:
|
|
description: Publish the staged musl artifacts to a GitHub release.
|
|
required: false
|
|
default: true
|
|
type: boolean
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}::${{ inputs.release_tag || github.run_id }}
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
metadata:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
release_tag: ${{ steps.release_tag.outputs.release_tag }}
|
|
v8_version: ${{ steps.v8_version.outputs.version }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Resolve exact v8 crate version
|
|
id: v8_version
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
version="$(python3 .github/scripts/rusty_v8_bazel.py resolved-v8-crate-version)"
|
|
echo "version=${version}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Resolve release tag
|
|
id: release_tag
|
|
env:
|
|
RELEASE_TAG_INPUT: ${{ inputs.release_tag }}
|
|
V8_VERSION: ${{ steps.v8_version.outputs.version }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
release_tag="${RELEASE_TAG_INPUT}"
|
|
if [[ -z "${release_tag}" ]]; then
|
|
release_tag="rusty-v8-v${V8_VERSION}"
|
|
fi
|
|
|
|
echo "release_tag=${release_tag}" >> "$GITHUB_OUTPUT"
|
|
|
|
build:
|
|
name: Build ${{ matrix.target }}
|
|
needs: metadata
|
|
runs-on: ${{ matrix.runner }}
|
|
permissions:
|
|
contents: read
|
|
actions: read
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- runner: ubuntu-24.04
|
|
platform: linux_amd64_musl
|
|
target: x86_64-unknown-linux-musl
|
|
- runner: ubuntu-24.04-arm
|
|
platform: linux_arm64_musl
|
|
target: aarch64-unknown-linux-musl
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Set up Bazel
|
|
uses: bazelbuild/setup-bazelisk@v3
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Build Bazel V8 release pair
|
|
env:
|
|
BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }}
|
|
PLATFORM: ${{ matrix.platform }}
|
|
TARGET: ${{ matrix.target }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
target_suffix="${TARGET//-/_}"
|
|
pair_target="//third_party/v8:rusty_v8_release_pair_${target_suffix}"
|
|
extra_targets=()
|
|
if [[ "${TARGET}" == *-unknown-linux-musl ]]; then
|
|
extra_targets=(
|
|
"@llvm//runtimes/libcxx:libcxx.static"
|
|
"@llvm//runtimes/libcxx:libcxxabi.static"
|
|
)
|
|
fi
|
|
|
|
bazel_args=(
|
|
build
|
|
-c
|
|
opt
|
|
"--platforms=@llvm//platforms:${PLATFORM}"
|
|
"${pair_target}"
|
|
"${extra_targets[@]}"
|
|
--build_metadata=COMMIT_SHA=$(git rev-parse HEAD)
|
|
)
|
|
|
|
bazel \
|
|
--noexperimental_remote_repo_contents_cache \
|
|
--bazelrc=.github/workflows/v8-ci.bazelrc \
|
|
"${bazel_args[@]}" \
|
|
"--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}"
|
|
|
|
- name: Stage release pair
|
|
env:
|
|
PLATFORM: ${{ matrix.platform }}
|
|
TARGET: ${{ matrix.target }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
python3 .github/scripts/rusty_v8_bazel.py stage-release-pair \
|
|
--platform "${PLATFORM}" \
|
|
--target "${TARGET}" \
|
|
--compilation-mode opt \
|
|
--output-dir "dist/${TARGET}"
|
|
|
|
- name: Upload staged musl artifacts
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: rusty-v8-${{ needs.metadata.outputs.v8_version }}-${{ matrix.target }}
|
|
path: dist/${{ matrix.target }}/*
|
|
|
|
publish-release:
|
|
if: ${{ inputs.publish }}
|
|
needs:
|
|
- metadata
|
|
- build
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
actions: read
|
|
|
|
steps:
|
|
- name: Ensure publishing from default branch
|
|
if: ${{ github.ref_name != github.event.repository.default_branch }}
|
|
env:
|
|
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
echo "Publishing is only allowed from ${DEFAULT_BRANCH}; current ref is ${GITHUB_REF_NAME}." >&2
|
|
exit 1
|
|
|
|
- name: Ensure release tag is new
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
RELEASE_TAG: ${{ needs.metadata.outputs.release_tag }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
if gh release view "${RELEASE_TAG}" --repo "${GITHUB_REPOSITORY}" > /dev/null 2>&1; then
|
|
echo "Release tag ${RELEASE_TAG} already exists; musl artifact tags are immutable." >&2
|
|
exit 1
|
|
fi
|
|
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
path: dist
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ needs.metadata.outputs.release_tag }}
|
|
name: ${{ needs.metadata.outputs.release_tag }}
|
|
files: dist/**
|
|
# Keep V8 artifact releases out of Codex's normal "latest release" channel.
|
|
prerelease: true
|