Skip to content

Manual Release

Manual Release #84

Workflow file for this run

name: Manual Release
on:
workflow_dispatch:
inputs:
version:
description: "Release version (e.g., v0.3.15)"
required: true
type: string
goneonize:
description: "Build binaries"
type: boolean
required: true
default: true
build_windows_zig:
description: "Include Windows/Zig"
type: boolean
default: false
build_mac:
description: "Include MacOS"
type: boolean
default: false
env:
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
jobs:
android:
# Selalu jalan jika master switch ON
if: ${{ inputs.goneonize }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: '^1.25.3'
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- uses: astral-sh/setup-uv@v5
- name: Cache dependencies
uses: actions/cache@v4
with:
path: "**/.venv"
key: ${{ runner.os }}-${{ hashFiles('**/uv.lock') }}
- name: Install dependencies & Set Version
run: |
uv sync --dev
uv run task version neonize --set-version ${{ inputs.version }}
uv run task version goneonize --set-version ${{ inputs.version }}
- name: Build Android
run: |
export CGO_ENABLED=1
wget -q https://dl.google.com/android/repository/android-ndk-r26b-linux.zip
unzip -q android-ndk-r26b-linux.zip
export ANDROID_NDK_HOME=$(pwd)/android-ndk-r26b
export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
# ARM64
export CC=$(which aarch64-linux-android28-clang)
export CXX=$(which aarch64-linux-android28-clang++)
export GOOS=android
export GOARCH=arm64
uv run task build goneonize
# ARM
export CC=$(which armv7a-linux-androideabi28-clang)
export CXX=$(which armv7a-linux-androideabi28-clang++)
export GOOS=android
export GOARCH=arm
uv run task build goneonize
# AMD64
export CC=$(which x86_64-linux-android28-clang)
export CXX=$(which x86_64-linux-android28-clang++)
export GOOS=android
export GOARCH=amd64
uv run task build goneonize
# 386
export CC=$(which i686-linux-android28-clang)
export CXX=$(which i686-linux-android28-clang++)
export GOOS=android
export GOARCH=386
uv run task build goneonize
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: Android
path: neonize/*.so
zig:
# Hanya jalan jika dicentang build_windows_zig
if: ${{ inputs.goneonize && inputs.build_windows_zig }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: '^1.25.3'
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- uses: mlugg/setup-zig@v2
- uses: astral-sh/setup-uv@v5
- name: Cache dependencies
uses: actions/cache@v4
with:
path: "**/.venv"
key: ${{ runner.os }}-${{ hashFiles('**/uv.lock') }}
- name: Install dependencies & Set Version
run: |
uv sync --dev
uv run task version neonize --set-version ${{ inputs.version }}
uv run task version goneonize --set-version ${{ inputs.version }}
- name: Build Windows & Linux (Zig)
run: |
mkdir LIBS
export CGO_ENABLED=1
# Windows AMD64
export GOOS=windows
export GOARCH=amd64
export CC="zig cc -target x86_64-windows"
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.dll LIBS
# Windows ARM64
export GOOS=windows
export GOARCH=arm64
export CC="zig cc -target aarch64-windows"
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.dll LIBS
# Windows 386
export GOOS=windows
export GOARCH=386
export CC="zig cc -target x86-windows"
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.dll LIBS
# Linux 386
export GOOS=linux
export GOARCH=386
export CC="zig cc -target x86-linux"
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.so LIBS
cp dist/*.whl LIBS/
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: Zig
path: LIBS/*
linux:
# Selalu jalan jika master switch ON
if: ${{ inputs.goneonize }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: '^1.25.3'
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- uses: astral-sh/setup-uv@v5
- name: Cache dependencies
uses: actions/cache@v4
with:
path: "**/.venv"
key: ${{ runner.os }}-${{ hashFiles('**/uv.lock') }}
- name: Install dependencies & Set Version
run: |
uv sync --dev
uv run task version neonize --set-version ${{ inputs.version }}
uv run task version goneonize --set-version ${{ inputs.version }}
- name: Install Compilers
run: sudo apt update && sudo apt install -y wget gcc-aarch64-linux-gnu gcc-s390x-linux-gnu gcc-riscv64-linux-gnu
- name: Build Linux
run: |
mkdir LIBS
export CGO_ENABLED=1
# AMD64
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.so LIBS
# ARM64
export GOOS=linux
export GOARCH=arm64
export CC=$(which aarch64-linux-gnu-gcc)
export CXX=$(which aarch64-linux-gnu-cpp)
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.so LIBS
# RISCV64
export GOOS=linux
export GOARCH=riscv64
export CC=$(which riscv64-linux-gnu-gcc)
export CXX=$(which riscv64-linux-gnu-cpp)
uv run task build goneonize
mv neonize/*.so LIBS
# S390X
export GOOS=linux
export GOARCH=s390x
export CC=$(which s390x-linux-gnu-gcc)
export CXX=$(which s390x-linux-gnu-cpp)
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.so LIBS
cp dist/*.whl LIBS/
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: Linux
path: LIBS/*
darwin:
# Hanya jalan jika dicentang build_mac
if: ${{ inputs.goneonize && inputs.build_mac }}
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: '^1.25.3'
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- uses: astral-sh/setup-uv@v5
- name: Cache dependencies
uses: actions/cache@v4
with:
path: "**/.venv"
key: ${{ runner.os }}-${{ hashFiles('**/uv.lock') }}
- name: Install dependencies & Set Version
run: |
uv sync --dev
uv run task version neonize --set-version ${{ inputs.version }}
uv run task version goneonize --set-version ${{ inputs.version }}
- name: Build MacOS
run: |
mkdir LIBS
export PATH="/Users/runner/.local/bin:$PATH"
export CGO_ENABLED=1
# AMD64
export GOOS=darwin
export GOARCH=amd64
export CC=$(which clang)
export CXX=$(which clang++)
uv run task build goneonize
uv build
uv run task repack
mv neonize/*.dylib LIBS/
# ARM64
export GOOS=darwin
export GOARCH=arm64
export CC=$(which clang)
export CXX=$(which clang++)
uv run task build goneonize
uv build
uv run task repack
cp dist/*.whl LIBS/
mv neonize/*.dylib LIBS/
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: Darwin
path: LIBS/*
release:
runs-on: ubuntu-latest
needs: [android, zig, linux, darwin]
if: |
always() &&
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled')
permissions:
contents: write
steps:
- if: ${{ inputs.goneonize }}
name: Download Artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true
path: sharedlib
- if: ${{ inputs.goneonize }}
name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ inputs.version }}
name: Release ${{ inputs.version }}
draft: false
prerelease: false
files: |
sharedlib/*.so
sharedlib/*.dll
sharedlib/*.dylib
sharedlib/*.whl
generate_release_notes: true
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- uses: astral-sh/setup-uv@v5
- name: Publish to PyPI
run: |
uv sync --dev
uv run task version neonize --set-version ${{ inputs.version }}
if [[ $UV_PUBLISH_TOKEN ]];then
uv build && uv publish
fi