all repos — mn @ fd47cc4031cb698d92e15e1944f16149eef66586

A truly minimal concatenative programming language.

.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
 142
 143
 144
 145
name: Release

# Controls when the action will run.
on:
    # 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, MacOS and Windows
        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 }}

            # 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

            # Build for linux
            - name: Build (Linux)
              run: nim c -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --gc:orc --deepcopy:on --opt:size mn
              if: matrix.os == 'ubuntu-latest'

            # Build for MacOS
            - name: Build (MacOS)
              run: nim c -d:release --gc:orc --deepcopy:on --opt:size mn
              if: matrix.os == 'macos-latest'

            # Build for Windows
            - name: Build (Windows)
              run: nim c -d:release --gc:orc --deepcopy:on --opt:size mn
              if: matrix.os == 'windows-latest'

            - name: Get Version (Linux, MacOS)
              id: version
              run: echo "::set-output name=id::$(./mn mntool info:version)"
              if: matrix.os == 'macos-latest' || matrix.os == 'linux-latest'

            - name: Get Version (Windows)
              id: version
              run: echo "::set-output name=id::$(mn mntool info:version)"
              if: matrix.os == 'windows-latest'

            # Package the resulting Linux binary
            - name: Create artifact (Linux)
              run: |
                  install -m 0755 ./mn .
                  zip mn_v${{steps.version.outputs.id}}_linux_x64.zip mn
              if: matrix.os == 'linux-latest'

            # Package the resulting MacOS binary
            - name: Create artifact (MacOS)
              run: |
                  install -m 0755 ./mn .
                  zip mn_v${{steps.version.outputs.id}}_macosx_x64.zip mn
              if: matrix.os == 'macosx-latest'

            # Package the resulting Windows binary
            - name: Create artifact (Windows)
              run: 7zip a -tzip mn_v${{steps.version.outputs.id}}_windows_x64.zip mn.exe
              if: matrix.os == 'windows-latest'

            # Upload artifacts
            - name: Upload Artifact
              uses: "actions/upload-artifact@v1"
              with:
                  path: mn_v*.zip

    # 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
            - id: get-release
              uses: pozetroninc/github-action-get-latest-release@master
              with:
                  repository: ${{ github.repository }}

            # 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.get-release.outputs.release }}
                  assets_path: ./assets

            # Celebrate! :)