.github/workflows/release.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
name: Release
# Controls when the action will run.
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
release:
name: "Build and upload artifacts"
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
- macos-14
steps:
# Cancel other actions of the same type that might be already running
- name: "Cancel similar actions in progress"
uses: styfle/cancel-workflow-action@0.9.1
with:
access_token: ${{ github.token }}
# Detects OS and provide Nim-friendly OS identifiers
- name: Detect current OS
id: os
run: echo "os=${{matrix.os == 'ubuntu-latest' && 'linux' || matrix.os == 'macos-latest' && 'macos' || matrix.os == 'macos-13' && 'macos' || matrix.os == 'windows-latest' && 'windows'}}" >> $GITHUB_OUTPUT
# Checks out the repository
- uses: actions/checkout@v2
# Install cosmocc
- name: Install cosmocc
run: |
mkdir -p $HOME/cosmocc
cd $HOME/cosmocc
wget -q https://cosmo.zip/pub/cosmocc/cosmocc.zip
unzip -q cosmocc.zip
pwd
ls -l
if: matrix.os == 'ubuntu-latest'
# Setup emsdk
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v14
if: matrix.os == 'ubuntu-latest'
# Retrieve ID and Name of the current (draft) release
- name: "Get current release"
id: current-release
uses: InsonusK/get-latest-release@v1.0.1
with:
myToken: ${{ github.token }}
exclude_types: "release"
view_top: 1
# Build (non-Windows)
- name: Build
run: make
if: matrix.os != 'windows-latest'
# Build libs (non-Windows)
- name: Build
run: make utils.hbx
if: matrix.os != 'windows-latest'
# Package the resulting Linux/macOS binary
- name: Create artifact (Linux, macOS)
run: zip hex_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_x86_64.zip hex lib/utils.hbx
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-13'
# Package the resulting macOs latest binary
- name: Create artifact (Linux, macOS)
run: zip hex_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_arm64.zip hex lib/utils.hbx
if: matrix.os == 'macos-latest'
# Build WASM binary
- name: Build WASM binary
run: make wasm
if: matrix.os == 'ubuntu-latest'
# Package the resulting WASM binary
- name: Create artifact (Linux - WASM)
run: zip hex_${{steps.current-release.outputs.tag_name}}_wasm.zip hex.wasm hex.js lib/utils.hbx
if: matrix.os == 'ubuntu-latest'
# Add cosmocc to PATH + see https://redbean.dev/#install
- name: Add cosmocc to PATH
run: |
echo $HOME/cosmocc/bin >> $GITHUB_PATH
sudo wget -O /usr/bin/ape https://cosmo.zip/pub/cosmos/bin/ape-$(uname -m).elf
sudo chmod +x /usr/bin/ape
sudo sh -c "echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
sudo sh -c "echo ':APE-jart:M::jartsr::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
if: matrix.os == 'ubuntu-latest'
# Generate APE binary
- name: Generate APE binary
run: |
mv hex hex.native
make ape
if: matrix.os == 'ubuntu-latest'
# Package the resulting APE binary
- name: Create artifact (Linux - APE)
run: zip hex_${{steps.current-release.outputs.tag_name}}_ape.zip hex lib/utils.hbx
if: matrix.os == 'ubuntu-latest'
# Build (Windows)
- name: Build
run: make
shell: bash
if: matrix.os == 'windows-latest'
# Build libs (Windows)
- name: Build
run: make utils.hbx
shell: bash
if: matrix.os == 'windows-latest'
# Package the resulting Windows binary
- name: Create artifact (Windows)
run: Compress-Archive -Path "hex.exe", "lib/utils.hbx" -DestinationPath hex_${{steps.current-release.outputs.tag_name}}_windows_x86_64.zip
if: matrix.os == 'windows-latest'
# Upload artifacts to current draft release
- name: "Upload to current release"
uses: xresloader/upload-to-github-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
file: "hex_v*.zip"
overwrite: true
tag_name: ${{steps.current-release.outputs.tag_name}}
release_id: ${{steps.current-release.outputs.id }}
verbose: true
|