Skip to content

build

build #10

Workflow file for this run

name: build
on:
workflow_call:
workflow_dispatch:
concurrency:
group: build-${{ github.head_ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
binary:
runs-on: ${{ matrix.platform.runner }}
env:
CROSS_VERSION: v0.2.5
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
- runner: macos-13
target: x86_64
- runner: macos-14
target: aarch64
- runner: windows-latest
target: x86_64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Prepare target
id: target
shell: bash
run: |
target="${{ matrix.platform.target }}"
if ${{ runner.os == 'Linux' }}; then
target+="-unknown-linux-gnu"
elif ${{ runner.os == 'macOS' }}; then
target+="-apple-darwin"
elif ${{ runner.os == 'Windows' }}; then
target+="-pc-windows-msvc"
fi
echo "target=$target" >> $GITHUB_OUTPUT
- uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c
with:
cache: ${{ !startsWith(github.ref, 'refs/tags/') }}
target: ${{ steps.target.outputs.target }}
- name: Install cross
if: ${{ runner.os == 'Linux' }}
shell: bash
run: |
dir="$RUNNER_TEMP/cross-download"
mkdir "$dir"
echo "$dir" >> $GITHUB_PATH
cd "$dir"
curl -LO "https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz"
tar xf cross-x86_64-unknown-linux-musl.tar.gz
- name: Build release binary
id: build
shell: bash
run: |
if ${{ runner.os == 'Linux' }}; then
cross build --verbose --release --target ${{ steps.target.outputs.target }}
else
cargo build --verbose --release --target ${{ steps.target.outputs.target }}
fi
if [[ "${{ matrix.platform.runner }}" == windows-* ]]; then
bin="./target/${{ steps.target.outputs.target }}/release/djls.exe"
else
bin="./target/${{ steps.target.outputs.target }}/release/djls"
fi
echo "bin=$bin" >> $GITHUB_OUTPUT
- name: Determine binary name
id: binary-name
shell: bash
run: |
target="${{ steps.target.outputs.target }}"
name="djls"
if [[ "$target" == *linux* ]]; then
name+="-linux"
elif [[ "$target" == *apple* ]]; then
name+="-darwin"
elif [[ "$target" == *windows* ]]; then
name+="-windows"
fi
if [[ "$target" == x86_64* ]]; then
name+="-x64"
elif [[ "$target" == aarch64* ]]; then
name+="-arm64"
fi
if [[ "$target" == *windows* ]]; then
name+=".exe"
fi
echo "name=$name" >> $GITHUB_OUTPUT
- name: Strip release binary (Linux)
if: ${{ runner.os == 'Linux' }}
shell: bash
run: |
target="${{ steps.target.outputs.target }}"
if [[ "$target" == x86_64* ]]; then
strip_cmd="x86_64-linux-gnu-strip"
elif [[ "$target" == aarch64* ]]; then
strip_cmd="aarch64-linux-gnu-strip"
fi
docker run --rm -v \
"$PWD/target:/target:Z" \
"ghcr.io/cross-rs/${{ steps.target.outputs.target }}:main" \
"$strip_cmd" \
"/${{ steps.build.outputs.bin }}"
- name: Strip release binary (macOS)
if: ${{ runner.os == 'macOS' }}
shell: bash
run: strip "${{ steps.build.outputs.bin }}"
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: binary-${{ steps.binary-name.outputs.name }}
path: ${{ steps.build.outputs.bin }}
linux:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: x86
- runner: ubuntu-22.04
target: aarch64
- runner: ubuntu-22.04
target: armv7
- runner: ubuntu-22.04
target: s390x
- runner: ubuntu-22.04
target: ppc64le
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.platform.target }}
path: dist
musllinux:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: x86
- runner: ubuntu-22.04
target: aarch64
- runner: ubuntu-22.04
target: armv7
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: musllinux_1_2
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-musllinux-${{ matrix.platform.target }}
path: dist
windows:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: windows-latest
target: x64
- runner: windows-latest
target: x86
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
architecture: ${{ matrix.platform.target }}
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.platform.target }}
path: dist
macos:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: macos-13
target: x86_64
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.platform.target }}
path: dist
sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Build sdist
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist