all repos — min @ 8b67c64bfc52014d8b9bd0cf4443aec408fb6391

A small but practical 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
name: Release

# Controls when the action will run. 
on:
  # Run only when a new tag is pushed
  push:
    tags:
      - 'v*.*.*'

  # 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 and MacOS (Windows can obviously be added as well)
    # Here, we could also add flags - under a different matrix key - 
    # for different builds: e.g. lite vs non-lite
      
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - macos-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

      # Install dependencies
      - name: Install nifty
        run: nimble install -y nifty
        
      - name: Install deps
        run: nifty install
      
      # Build for linux
      - name: Build (Linux)
        run: nim c -d:release -d:ssl --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --cpu:amd64 --os:linux  -o:min min
        if: matrix.os == 'ubuntu-latest'

      # Build for MacOS
      - name: Build (MacOS)
        run: nim c -d:release -d:ssl -o:min min
        if: matrix.os == 'macos-latest'
      
      # Package the resulting binary (along with the license and readme file)
      - name: Create artifact
        run: |
          install -m 0755 ./min .
          tar czf min-${{runner.os}}.tar.gz min README.md LICENSE

      # And upload it, so that we can reuse all of them later as release assets
      - name: Upload Artifact
        uses: 'actions/upload-artifact@v1'
        with:
          name: min-${{runner.os}}.tar.gz
          path: min-${{runner.os}}.tar.gz
          
  # 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
      - name: Create Release
        id: create-release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          body: |
            ${{ github.ref }}
          draft: false
          prerelease: false

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

      # Celebrate! :)