mirror of
https://github.com/extism/extism.git
synced 2026-01-09 05:47:54 -05:00
Also switches to actions-rust-lang/setup-rust-toolchain@v1 since actions-rs/toolchain is deprecated
229 lines
7.6 KiB
YAML
229 lines
7.6 KiB
YAML
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches: [ main, "v*" ]
|
|
tags:
|
|
- 'v*'
|
|
|
|
name: Release
|
|
|
|
env:
|
|
RUNTIME_MANIFEST: runtime/Cargo.toml
|
|
RUNTIME_CRATE: libextism
|
|
RUSTFLAGS: -C target-feature=-crt-static
|
|
ARTIFACT_DIR: release-artifacts
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
release:
|
|
name: ${{ matrix.os }} ${{ matrix.target }}
|
|
runs-on: ${{ matrix.os }}-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: 'macos'
|
|
target: 'x86_64-apple-darwin'
|
|
artifact: 'libextism.dylib'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: ''
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'macos'
|
|
target: 'aarch64-apple-darwin'
|
|
artifact: 'libextism.dylib'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: ''
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'ubuntu'
|
|
target: 'aarch64-unknown-linux-gnu'
|
|
artifact: 'libextism.so'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: ''
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'ubuntu'
|
|
target: 'aarch64-unknown-linux-musl'
|
|
artifact: 'libextism.so'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: ''
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'ubuntu'
|
|
target: 'x86_64-unknown-linux-gnu'
|
|
artifact: 'libextism.so'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: ''
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'ubuntu'
|
|
target: 'x86_64-unknown-linux-musl'
|
|
artifact: 'libextism.so'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: ''
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'windows'
|
|
target: 'x86_64-pc-windows-gnu'
|
|
artifact: 'extism.dll'
|
|
static-artifact: 'libextism.a'
|
|
static-dll-artifact: 'libextism.dll.a'
|
|
pc-in: 'extism.pc.in'
|
|
static-pc-in: 'extism-static.pc.in'
|
|
- os: 'windows'
|
|
target: 'x86_64-pc-windows-msvc'
|
|
artifact: 'extism.dll'
|
|
static-artifact: 'extism.lib'
|
|
static-dll-artifact: 'extism.dll.lib'
|
|
pc-in: ''
|
|
static-pc-in: ''
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Set version
|
|
shell: bash
|
|
run: |
|
|
version="${{ github.ref }}"
|
|
if [[ "$version" = "refs/heads/main" ]]; then
|
|
version="0.0.0-dev"
|
|
else
|
|
version="${version/refs\/tags\/v/}"
|
|
fi
|
|
sed -i -e "s/0.0.0+replaced-by-ci/${version}/g" Cargo.toml
|
|
pyproject="$(cat extism-maturin/pyproject.toml)"
|
|
<<<"$pyproject" >extism-maturin/pyproject.toml sed -e 's/^version = "0.0.0.replaced-by-ci"/version = "'"$version"'"/g'
|
|
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
toolchain: stable
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
with:
|
|
prefix-key: "${{matrix.os}}-${{matrix.target}}"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
cache-on-failure: "true"
|
|
|
|
- name: Build Target (${{ matrix.os }} ${{ matrix.target }})
|
|
if: ${{ matrix.os != 'windows' }}
|
|
run: |
|
|
cargo install cross
|
|
cross build --release --target ${{ matrix.target }} -p ${{ env.RUNTIME_CRATE }}
|
|
|
|
- name: Build Target (${{ matrix.os }} ${{ matrix.target }})
|
|
if: ${{ matrix.os == 'windows' }}
|
|
run: |
|
|
cargo build --release --target ${{ matrix.target }} -p ${{ env.RUNTIME_CRATE }}
|
|
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.10'
|
|
|
|
- name: Build wheels
|
|
uses: PyO3/maturin-action@v1
|
|
# maturin's cffi integration struggles with gnu headers on windows.
|
|
# there's partial work towards fixing this in `extism-maturin/build.rs`, but it's
|
|
# not sufficient to get it to work. omit it for now!
|
|
if: ${{ matrix.target != 'x86_64-pc-windows-gnu' && matrix.target != 'aarch64-unknown-linux-gnu' }}
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
args: --release --out dist --find-interpreter -m extism-maturin/Cargo.toml
|
|
sccache: 'true'
|
|
manylinux: auto
|
|
|
|
- name: Build GNU Linux wheels
|
|
uses: PyO3/maturin-action@v1
|
|
# One of our deps, "ring", needs a newer sysroot than what "manylinux: auto" provides.
|
|
if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
args: --release --out dist --find-interpreter -m extism-maturin/Cargo.toml
|
|
sccache: 'true'
|
|
manylinux: 2_28
|
|
|
|
- name: Add pkg-config files except on MSVC
|
|
if: ${{ matrix.target != 'x86_64-pc-windows-msvc' }}
|
|
shell: bash
|
|
run: |
|
|
SRC_DIR=target/${{ matrix.target }}/release
|
|
cp libextism/extism*.pc.in ${SRC_DIR}
|
|
|
|
- name: Prepare Artifact
|
|
shell: bash
|
|
run: |
|
|
SRC_DIR=target/${{ matrix.target }}/release
|
|
DEST_DIR=${{ env.ARTIFACT_DIR }}
|
|
RELEASE_NAME=libextism-${{ matrix.target }}-${{ github.ref_name }}
|
|
ARCHIVE=${RELEASE_NAME}.tar.gz
|
|
CHECKSUM=${RELEASE_NAME}.checksum.txt
|
|
|
|
# compress the shared library & create checksum
|
|
cp runtime/extism.h ${SRC_DIR}
|
|
cp LICENSE ${SRC_DIR}
|
|
tar -C ${SRC_DIR} -czvf ${ARCHIVE} extism.h \
|
|
${{ matrix.artifact }} ${{ matrix.static-artifact }} \
|
|
${{ matrix.pc-in }} ${{ matrix.static-pc-in }} \
|
|
${{ matrix.static-dll-artifact }}
|
|
ls -ll ${ARCHIVE}
|
|
|
|
if &>/dev/null which shasum; then
|
|
shasum -a 256 ${ARCHIVE} > ${CHECKSUM}
|
|
else
|
|
# windows doesn't have shasum available, so we use certutil instead.
|
|
certutil -hashfile ${ARCHIVE} SHA256 >${CHECKSUM}
|
|
fi
|
|
|
|
# copy archive and checksum into release artifact directory
|
|
mkdir -p ${DEST_DIR}
|
|
cp ${ARCHIVE} ${DEST_DIR}
|
|
cp ${CHECKSUM} ${DEST_DIR}
|
|
|
|
# copy any built wheels.
|
|
if [ -e dist/*.whl ]; then
|
|
cp dist/*.whl ${DEST_DIR}
|
|
fi
|
|
|
|
ls -ll ${DEST_DIR}
|
|
|
|
- name: Upload Artifact to Summary
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{ env.ARTIFACT_DIR }}
|
|
path: ${{ env.ARTIFACT_DIR }}
|
|
|
|
- name: Upload Artifact to Draft Release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
draft: true
|
|
files: |
|
|
${{ env.ARTIFACT_DIR }}/*
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
|
|
release-latest:
|
|
name: create latest release
|
|
runs-on: ubuntu-latest
|
|
needs: [release]
|
|
if: github.ref == 'refs/heads/main'
|
|
steps:
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: ${{ env.ARTIFACT_DIR }}
|
|
|
|
- uses: "marvinpinto/action-automatic-releases@latest"
|
|
with:
|
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
|
automatic_release_tag: "latest"
|
|
prerelease: true
|
|
title: "Development Build"
|
|
files: |
|
|
*.tar.gz
|
|
*.txt
|
|
*.whl
|
|
if: github.ref == 'refs/heads/main'
|