all repos — min @ 3eb7afc76971ec02b76044b094126b126f348a79

A small but practical concatenative programming language.

.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
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.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' && '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
              run: echo "$HOME/.nimble/bin" >> $GITHUB_PATH
              if: matrix.os == 'macos-latest' || 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-latest'

            # Install the Nim compiler and dependencies
            - name: Install Nim and deps
              run: |
                  curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
                  sh init.sh -y
                  nimble install -y

            # Build for Linux
            - name: Build (Linux)
              run: nimble build -y -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc -d:ssl -d:useOpenSsl3 --opt:size
              if: matrix.os == 'ubuntu-latest'

            # Build for macOS/Windows
            - name: Build (macOS, Windows)
              run: nimble build -y -d:release -d:ssl -d:useOpenSsl3 --opt:size
              if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest'

            # UPX compress (*nix) 
            - name: UPX
              uses: svenstaro/upx-action@v2
              with:
                files: |
                  min
                args: --best --force
              if: matrix.os == 'macos-latest' || 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-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 min_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_x64.zip min
              if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
              
            # 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-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: "min_v*.zip"
                  overwrite: true
                  tag_name: ${{steps.current-release.outputs.tag_name}}
                  release_id: ${{steps.current-release.outputs.id }}
                  verbose: true