Add artifacts to current release #32
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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-13 | |
- windows-2019 | |
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.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-13' && 'macosx' || matrix.os == 'windows-2019' && 'windows'}}" >> $GITHUB_OUTPUT | |
# Checks out the repository | |
- uses: actions/checkout@v2 | |
# Sets path (Linux, macOS) | |
- name: Update $PATH | |
run: echo "$HOME/.nimble/bin" >> $GITHUB_PATH | |
if: matrix.os == 'macos-13' || matrix.os == 'ubuntu-latest' | |
# Sets path (Windows) | |
- name: Update %PATH% | |
run: echo "${HOME}/.nimble/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
if: matrix.os == 'windows-2019' | |
# Installs libraries | |
- name: install musl-gcc | |
run: sudo apt-get install -y musl-tools | |
if: matrix.os == 'ubuntu-latest' | |
- name: Setup Msys2 | |
if: matrix.os == 'windows-2019' | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MINGW64 | |
release: true | |
update: true | |
path-type: inherit | |
install: >- | |
base-devel | |
autotools | |
mingw-w64-x86_64-perl-locale-maketext | |
mingw-w64-x86_64-toolchain | |
mingw-w64-x86_64-autotools | |
# Install the Nim | |
- name: Install Nim | |
uses: iffy/install-nim@v4.5.0 | |
# Build for Linux | |
- name: Build (Linux) | |
run: nimble build -v -y -d:release --gcc.exe:musl-gcc --mm:refc --gcc.linkerexe:musl-gcc -d:ssl --opt:size min | |
if: matrix.os == 'ubuntu-latest' | |
# Build for macOS | |
- name: Build (macOS) | |
run: nimble build -v -y -d:release -d:ssl --opt:size --mm:refc min | |
if: matrix.os == 'macos-13' | |
# Build for Windows | |
- name: Build (Windows) | |
shell: msys2 {0} | |
run: nimble build -v -y -d:release --mm:refc --opt:size -d:ssl --gcc.exe:x86_64-w64-mingw32-gcc --gcc.linkerexe:x86_64-w64-mingw32-gcc min | |
if: matrix.os == 'windows-2019' | |
# UPX compress (Linux) | |
- name: UPX | |
uses: svenstaro/upx-action@v2 | |
with: | |
files: | | |
min | |
args: --best --force | |
if: matrix.os == 'ubuntu-latest' | |
# UPX compress (Windows) | |
- name: UPX | |
uses: svenstaro/upx-action@v2 | |
with: | |
files: | | |
min.exe | |
args: --best --force | |
if: matrix.os == 'windows-2019' | |
# 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 min_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_x64.zip min | |
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-13' | |
# Package the resulting Windows binary | |
- name: Create artifact (Windows) | |
run: Compress-Archive -Path min.exe -DestinationPath min_${{steps.current-release.outputs.tag_name}}_windows_x64.zip | |
if: matrix.os == 'windows-2019' | |
# 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: "min_v*.zip" | |
overwrite: true | |
tag_name: ${{steps.current-release.outputs.tag_name}} | |
release_id: ${{steps.current-release.outputs.id }} | |
verbose: true |