Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F9912639
build-platform.yml
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
build-platform.yml
View Options
name
:
Build Platform
on
:
workflow_call
:
inputs
:
platform
:
description
:
'Platform
key
from
versions.json
targets'
required
:
true
type
:
string
build_timestamp
:
required
:
true
type
:
string
outputs
:
version
:
description
:
Build version
value
:
${{ jobs.build.outputs.version }}
jobs
:
build
:
outputs
:
version
:
${{ steps.build.outputs.version }}
# runs-on/container/shell must be hardcoded
runs-on
:
|-
${{ case(
inputs.platform == 'linux-glibc-x64', 'ubuntu-24.04',
inputs.platform == 'linux-glibc-aarch64', 'ubuntu-24.04-arm',
inputs.platform == 'linux-musl-x64', 'ubuntu-24.04',
inputs.platform == 'linux-musl-aarch64', 'ubuntu-24.04-arm',
inputs.platform == 'macos-x64', 'macos-15-intel',
inputs.platform == 'macos-aarch64', 'macos-15',
inputs.platform == 'windows-x64', 'windows-latest',
'ubuntu-24.04'
) }}
container
:
|-
${{ case(
startsWith(inputs.platform, 'linux-glibc'), 'ubuntu:22.04',
startsWith(inputs.platform, 'linux-musl'), 'alpine:3.23',
''
) }}
defaults
:
run
:
shell
:
|-
${{ case(
startsWith(inputs.platform, 'linux-glibc'), 'bash',
startsWith(inputs.platform, 'linux-musl'), 'sh',
startsWith(inputs.platform, 'macos'), 'bash',
inputs.platform == 'windows-x64', 'msys2 {0}',
'bash'
) }}
steps
:
# === ALPINE ARM64 WORKAROUND (must be first) ===
-
name
:
Setup Alpine ARM64 support
uses
:
laverdet/alpine-arm64@v1
if
:
startsWith(inputs.platform, 'linux-musl')
# === LINUX GLIBC SETUP ===
-
name
:
Setup Linux glibc environment
if
:
startsWith(inputs.platform, 'linux-glibc')
env
:
DEBIAN_FRONTEND
:
noninteractive
run
:
|
if [[ "${{ inputs.platform }}" == *"aarch64"* ]]; then
sed -i 's|http://ports.ubuntu.com/ubuntu-ports|http://mirrors.ocf.berkeley.edu/ubuntu-ports|g' /etc/apt/sources.list
else
sed -i 's|http://archive.ubuntu.com/ubuntu|http://azure.archive.ubuntu.com/ubuntu|g' /etc/apt/sources.list
sed -i 's|http://security.ubuntu.com/ubuntu|http://azure.archive.ubuntu.com/ubuntu|g' /etc/apt/sources.list
fi
apt-get update
apt-get install -y git ca-certificates gnupg wget software-properties-common curl \
python3-pip ninja-build cmake pkg-config jq
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs
pip3 install meson tomli
git config --global --add safe.directory "$GITHUB_WORKSPACE"
# === LINUX MUSL SETUP ===
-
name
:
Setup Linux musl environment
if
:
startsWith(inputs.platform, 'linux-musl')
run
:
|
apk add --no-cache git clang lld llvm meson ninja cmake pkgconf curl npm nodejs \
musl-dev \
util-linux-dev util-linux-static linux-headers libunwind-dev libunwind-static \
py3-tomli tar xz zstd jq bash
git config --global --add safe.directory "$GITHUB_WORKSPACE"
# === MACOS SETUP ===
-
name
:
Setup macOS environment
if
:
startsWith(inputs.platform, 'macos')
run
:
|
for pkg in meson ninja llvm jq; do
brew list "$pkg" &>/dev/null || brew install "$pkg"
done
# === WINDOWS SETUP ===
-
name
:
Disable Windows Defender real-time monitoring
if
:
inputs.platform == 'windows-x64'
shell
:
pwsh
run
:
Set-MpPreference -DisableRealtimeMonitoring $true
-
name
:
Setup Windows MSYS2
if
:
inputs.platform == 'windows-x64'
uses
:
msys2/setup-msys2@v2
with
:
msystem
:
CLANG64
cache
:
true
install
:
>-
mingw-w64-clang-x86_64-toolchain mingw-w64-clang-x86_64-meson mingw-w64-clang-x86_64-ninja
mingw-w64-clang-x86_64-cmake
mingw-w64-clang-x86_64-lld mingw-w64-clang-x86_64-nodejs git jq
-
name
:
Configure git line endings
if
:
inputs.platform == 'windows-x64'
run
:
git config --global core.autocrlf false
shell
:
bash
-
name
:
Checkout
uses
:
actions/checkout@v5
with
:
submodules
:
recursive
# === LOAD TARGET CONFIG ===
-
name
:
Load target configuration
id
:
config
shell
:
bash
run
:
|
CONFIG=$(jq -r '.targets["${{ inputs.platform }}"]' .github/versions.json)
TOOLS=$(jq -r '.tools' .github/versions.json)
DEPS=$(jq -r '.dependencies' .github/versions.json)
# Tools
echo "zig_version=$(echo $TOOLS | jq -r '.zig')" >> $GITHUB_OUTPUT
echo "llvm_version=$(echo $TOOLS | jq -r '.llvm')" >> $GITHUB_OUTPUT
echo "node_version=$(echo $TOOLS | jq -r '.node')" >> $GITHUB_OUTPUT
# Target config
echo "os_type=$(echo $CONFIG | jq -r '.os_type')" >> $GITHUB_OUTPUT
echo "arch=$(echo $CONFIG | jq -r '.arch')" >> $GITHUB_OUTPUT
echo "zig_target=$(echo $CONFIG | jq -r '.zig_target')" >> $GITHUB_OUTPUT
echo "rust_target=$(echo $CONFIG | jq -r '.rust_target')" >> $GITHUB_OUTPUT
echo "binary_name=$(echo $CONFIG | jq -r '.binary_name')" >> $GITHUB_OUTPUT
echo "static_link=$(echo $CONFIG | jq -r '.static_link')" >> $GITHUB_OUTPUT
echo "cmake_generator=$(echo $CONFIG | jq -r '.cmake_generator // empty')" >> $GITHUB_OUTPUT
echo "extra_meson_args=$(echo $CONFIG | jq -r '.extra_meson_args // empty')" >> $GITHUB_OUTPUT
ARTIFACT_NAME=$(echo $CONFIG | jq -r '.artifact_name')
echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT
DEPS_LIST=$(echo $CONFIG | jq -r '.deps | join(" ")')
echo "deps=$DEPS_LIST" >> $GITHUB_OUTPUT
# Dep versions
echo "zlib_version=$(echo $DEPS | jq -r '.zlib')" >> $GITHUB_OUTPUT
# === SETUP ZIG ===
-
name
:
Setup Zig
uses
:
./.github/actions/setup-zig
with
:
version
:
${{ steps.config.outputs.zig_version }}
# === SETUP LLVM ===
-
name
:
Setup LLVM
id
:
llvm
uses
:
./.github/actions/setup-llvm
with
:
version
:
${{ steps.config.outputs.llvm_version }}
os_type
:
${{ steps.config.outputs.os_type }}
# === SETUP RUST ===
-
name
:
Setup Rust
uses
:
dtolnay/rust-toolchain@stable
with
:
targets
:
${{ steps.config.outputs.rust_target }}
-
name
:
Cache Rust
uses
:
Swatinem/rust-cache@v2
with
:
workspaces
:
src/strip -> ../../build/oxc-target
# === BUILD NATIVE DEPS ===
-
name
:
Build native dependencies
uses
:
./.github/actions/build-native-deps
with
:
deps
:
${{ steps.config.outputs.deps }}
prefix
:
${{ github.workspace }}/.deps-cache
cc
:
${{ steps.llvm.outputs.cc }}
cxx
:
${{ steps.llvm.outputs.cxx }}
ar
:
${{ steps.llvm.outputs.ar }}
ranlib
:
${{ steps.llvm.outputs.ranlib }}
cmake_generator
:
${{ steps.config.outputs.cmake_generator }}
zlib_version
:
${{ steps.config.outputs.zlib_version }}
# === BUILD PROJECT ===
-
name
:
Build project
id
:
build
uses
:
./.github/actions/build-project
with
:
cc
:
${{ steps.llvm.outputs.cc }}
cxx
:
${{ steps.llvm.outputs.cxx }}
ar
:
${{ steps.llvm.outputs.ar }}
ranlib
:
${{ steps.llvm.outputs.ranlib }}
ld
:
${{ steps.llvm.outputs.ld }}
strip
:
${{ steps.llvm.outputs.strip }}
deps_prefix
:
${{ github.workspace }}/.deps-cache
build_timestamp
:
${{ inputs.build_timestamp }}
static_link
:
${{ steps.config.outputs.static_link }}
extra_meson_args
:
${{ steps.config.outputs.extra_meson_args }}
binary_name
:
${{ steps.config.outputs.binary_name }}
# === UPLOAD ARTIFACTS ===
-
name
:
Upload binary
uses
:
actions/upload-artifact@v6
with
:
name
:
${{ steps.config.outputs.artifact_name }}
path
:
|
build/${{ steps.config.outputs.binary_name }}
build/*.dll
-
name
:
Save version info
shell
:
bash
run
:
echo "${{ steps.build.outputs.version }}" > version.txt
-
name
:
Upload version info
uses
:
actions/upload-artifact@v6
with
:
name
:
version-${{ steps.config.outputs.artifact_name }}
path
:
version.txt
retention-days
:
1
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Aug 1, 6:15 PM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
587073
Default Alt Text
build-platform.yml (8 KB)
Attached To
Mode
rANT Ant
Attached
Detach File
Event Timeline
Log In to Comment