all repos — min @ cf10e461c74ca7a218b08ed822ab0cc0c268ea01

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
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
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-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-13' && 'macosx' || matrix.os == 'windows-latest' && '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-latest'
              
            # 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-latest'
              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 compiler and dependencies
            - name: Install Nim and deps
              run: |
                  curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
                  sh init.sh -y

            # 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-latest'

            # 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-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-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-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