.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: # 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 - name: Project Metadata Action uses: radcortez/project-metadata-action@1.0 id: metadata with: metadata-file-path: "mn.yml" # 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' # Package the resulting Linux binary - name: Create artifact (Linux) run: | install -m 0755 ./mn . zip mn_v${{steps.metadata.outputs.version}}_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.metadata.outputs.version}}_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.metadata.outputs.version}}_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! :) |