.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 141 |
name: Release
# Controls when the action will run.
on:
# Run only when a new tag is pushed
push:
tags:
- 'v*.*.*'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
# First, build and package our different assets
package:
name: "Package"
# Set up a matrix of different configurations:
# for now Linux and MacOS (Windows can obviously be added as well)
# Here, we could also add flags - under a different matrix key -
# for different builds: e.g. lite vs non-lite
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
env:
CHOOSENIM_CHOOSE_VERSION: stable
CHOOSENIM_NO_ANALYTICS: 1
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.6.0
with:
access_token: ${{ github.token }}
# Checks out the repository
- uses: actions/checkout@v2
# Install libraries
- name: install musl-gcc
run: sudo apt-get install -y musl-tools
if: matrix.os == 'ubuntu-latest'
# Set path
- name: Update $PATH
run: echo "$HOME/.nimble/bin" >> $GITHUB_PATH
# Install the compiler
- name: Install Nim
run: |
curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
sh init.sh -y
# Install dependencies
- name: Install nifty
run: nimble install -y nifty
- name: Install deps
run: nifty install
# Build for linux
- name: Build (Linux)
run: nim c -d:release -d:ssl --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --cpu:amd64 --os:linux -o:min min
if: matrix.os == 'ubuntu-latest'
# Build for MacOS
- name: Build (MacOS)
run: nim c -d:release -d:ssl -o:min min
if: matrix.os == 'macos-latest'
# Package the resulting binary (along with the license and readme file)
- name: Create artifact
run: |
install -m 0755 ./min .
tar czf min-${{runner.os}}.tar.gz min README.md LICENSE
# And upload it, so that we can reuse all of them later as release assets
- name: Upload Artifact
uses: 'actions/upload-artifact@v1'
with:
name: min-${{runner.os}}.tar.gz
path: min-${{runner.os}}.tar.gz
# Then, let's prepare our new release and upload the assets above
upload:
name: "Upload"
runs-on: ubuntu-latest
if: ${{ always() }}
# This should run after all matrix job (for linux, mac, etc) above have finished
needs: [package]
steps:
- name: "Cancel similar actions in progress"
uses: styfle/cancel-workflow-action@0.6.0
with:
access_token: ${{ github.token }}
# Download all of the previously created assets
# and put them in an ./assets folder
- uses: actions/download-artifact@v2
with:
path: ./assets
# That's just for debugging to make sure everything is in place
- name: Display structure of downloaded files
run: ls -R
# Create a new release
- name: Create Release
id: create-release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
body: |
${{ github.ref }}
draft: false
prerelease: false
# Post all of the above assets (under ./assets)
# as part of the newly created release
- name: Upload Release Assets
id: upload-release-assets
uses: dwenegar/upload-release-assets@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
release_id: ${{ steps.create-release.outputs.id }}
assets_path: ./assets
# Celebrate! :)
|