.github/workflows/add-artifacts-to-current-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 |
name: Add Artifacts to Current 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 }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-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 }}
# 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' && 'macosx' || matrix.os == 'windows-latest' && 'windows'}}" >> $GITHUB_OUTPUT
# Checks out the repository
- uses: actions/checkout@v2
# Installs libraries
- name: install musl-gcc
run: sudo apt-get install -y musl-tools
if: matrix.os == 'ubuntu-latest'
# Sets path (Linux, macOS)
- name: Update $PATH
shell: bash
run: |
echo "$HOME/.nimble/bin" >> $GITHUB_PATH
echo $GITHUB_WORKSPACE >> $GITHUB_PATH
# Sets path (Windows)
- name: Update %PATH%
run: |
echo "${HOME}/.nimble/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
echo "${GITHUB_WORKSPACE}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
echo "C:\msys64\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
if: matrix.os == 'windows-latest'
# Install the Nim compiler
- name: Install Nim
run: |
curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
sh init.sh -y
# Temporary Windows-specific fix (missing certificates for nimble)
- name: Install cert (temporary fix, windows only)
run: |
curl https://curl.se/ca/cacert.pem -L -o cacert.pem
if: matrix.os == 'windows-latest'
# Build for Linux
- name: Build (Linux)
run: |
nimble build -v -y --passL:-static -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --mm:refc --opt:size
if: matrix.os == 'ubuntu-latest'
# Build for macOS/Windows
- name: Build (macOS, Windows)
shell: bash
run: |
nimble build -v -y -d:release --mm:refc --opt:size
if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest'
# UPX compress (*nix)
- name: UPX
uses: svenstaro/upx-action@v2
with:
files: |
hastyscribe
args: --best --force
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
# UPX compress (Windows)
- name: UPX
uses: svenstaro/upx-action@v2
with:
files: |
hastyscribe.exe
args: --best --force
if: matrix.os == 'windows-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
# Package the resulting Linux/macOS binary
- name: Create artifact (Linux, macOS)
run: zip hastyscribe_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_x64.zip hastyscribe
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
# Package the resulting Windows binary
- name: Create artifact (Windows)
run: Compress-Archive -Path hastyscribe.exe -DestinationPath hastyscribe_${{steps.current-release.outputs.tag_name}}_windows_x64.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: "hastyscribe_v*.zip"
overwrite: true
tag_name: ${{steps.current-release.outputs.tag_name}}
release_id: ${{steps.current-release.outputs.id }}
verbose: true
|