119 lines
3.4 KiB
YAML
119 lines
3.4 KiB
YAML
name: Release Hero
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*"
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build:
|
|
timeout-minutes: 60
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: x86_64-linux
|
|
os: ubuntu-latest
|
|
- target: aarch64-linux
|
|
os: ubuntu-24.04-arm
|
|
- target: aarch64-apple-darwin
|
|
os: macos-latest
|
|
# - target: x86_64-apple-darwin
|
|
# os: macos-13
|
|
runs-on: ${{ matrix.os }}
|
|
container: ${{ matrix.container }}
|
|
|
|
steps:
|
|
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
|
|
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
|
|
- run: echo "🔎 The name of your branch is ${{ github.ref_name }} and your repository is ${{ github.repository }}."
|
|
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup V & Herolib
|
|
id: setup
|
|
shell: bash
|
|
run: |
|
|
git clone https://github.com/vlang/v
|
|
cd v
|
|
make
|
|
./v symlink
|
|
cd -
|
|
|
|
mkdir -p ~/.vmodules/incubaid
|
|
ln -s $(pwd)/lib ~/.vmodules/incubaid/herolib
|
|
echo "Herolib symlink created to $(pwd)/lib"
|
|
timeout-minutes: 10
|
|
|
|
# For Linux, we build a static binary linked against musl on Alpine. For
|
|
# static linking, gcc is preferred
|
|
- name: Build Hero
|
|
timeout-minutes: 15
|
|
run: |
|
|
set -ex
|
|
if [ "${{ runner.os }}" = "Linux" ]; then
|
|
# Build for musl using Alpine in Docker
|
|
docker run --rm \
|
|
-v ${{ github.workspace }}/lib:/root/.vmodules/incubaid/herolib \
|
|
-v ${{ github.workspace }}:/herolib \
|
|
-w /herolib \
|
|
alpine:3.22 \
|
|
sh -c '
|
|
set -ex
|
|
apk add --no-cache bash git build-base openssl-dev libpq-dev postgresql-dev openssl-libs-static
|
|
cd v
|
|
make clean
|
|
make
|
|
./v symlink
|
|
cd ..
|
|
v -w -d use_openssl -enable-globals -cc gcc -cflags -static -ldflags "-lpgcommon_shlib -lpgport_shlib" cli/hero.v -o cli/hero-${{ matrix.target }}-musl
|
|
'
|
|
|
|
else
|
|
v -w -d use_openssl -enable-globals -cc clang cli/hero.v -o cli/hero-${{ matrix.target }}
|
|
fi
|
|
|
|
- name: Upload musl binary
|
|
if: runner.os == 'Linux'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: hero-${{ matrix.target }}-musl
|
|
path: cli/hero-${{ matrix.target }}-musl
|
|
|
|
- name: Upload
|
|
if: runner.os != 'Linux'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: hero-${{ matrix.target }}
|
|
path: cli/hero-${{ matrix.target }}
|
|
|
|
release_hero:
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Download Artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: cli/bins
|
|
merge-multiple: true
|
|
|
|
- name: Release
|
|
uses: softprops/action-gh-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.ref_name }}
|
|
name: Release ${{ github.ref_name }}
|
|
draft: false
|
|
fail_on_unmatched_files: true
|
|
generate_release_notes: true
|
|
files: cli/bins/*
|