all repos — hex @ 59c888a968157148034b0d4d14fc474b0c5b9cfd

A tiny, minimalist, slightly-esoteric concatenative programming lannguage.

.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
name: 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 }}
        permissions:
            contents: write
        strategy:
            matrix:
                os:
                    - ubuntu-latest
                    - macos-latest
                    - windows-latest
                    - macos-13
        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' && 'macos' || matrix.os == 'macos-13' && 'macos' || matrix.os == 'windows-latest' && 'windows'}}" >> $GITHUB_OUTPUT

            # Checks out the repository
            - uses: actions/checkout@v2

            # Install cosmocc
            - name: Install cosmocc
              run: |
                mkdir -p $HOME/cosmocc
                cd $HOME/cosmocc
                wget -q https://cosmo.zip/pub/cosmocc/cosmocc.zip
                unzip -q cosmocc.zip
                pwd
                ls -l
              if: matrix.os == 'ubuntu-latest'

            # Setup emsdk
            - name: Setup emsdk
              uses: mymindstorm/setup-emsdk@v14
              if: matrix.os == 'ubuntu-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
            
            # Build (non-Windows)
            - name: Build
              run: make
              if: matrix.os != 'windows-latest'

            # Package the resulting Linux/macOS binary
            - name: Create artifact (Linux, macOS)
              run: zip hex_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_x86_64.zip hex
              if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-13'

            # Package the resulting macOs latest binary
            - name: Create artifact (Linux, macOS)
              run: zip hex_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.os}}_arm64.zip hex
              if:  matrix.os == 'macos-latest'

            # Generate WASM binary
            - name: Generate WASM binary
              run: emcc -O2 -sASYNCIFY -sEXPORTED_RUNTIME_METHODS=stringToUTF8 hex.c -o hex.js
              if: matrix.os == 'ubuntu-latest'

            # Package the resulting WASM binary
            - name: Create artifact (Linux - WASM)
              run: zip hex_${{steps.current-release.outputs.tag_name}}_wasm.zip hex.wasm hex.js
              if: matrix.os == 'ubuntu-latest'

            # Add cosmocc to PATH + see https://redbean.dev/#install
            - name: Add cosmocc to PATH
              run: |
                echo $HOME/cosmocc/bin >> $GITHUB_PATH
                sudo wget -O /usr/bin/ape https://cosmo.zip/pub/cosmos/bin/ape-$(uname -m).elf
                sudo chmod +x /usr/bin/ape
                sudo sh -c "echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
                sudo sh -c "echo ':APE-jart:M::jartsr::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
              if: matrix.os == 'ubuntu-latest'

            # Generate APE binary
            - name: Generate APE binary
              run: |
                mv hex hex.native
                make ape
              if: matrix.os == 'ubuntu-latest'

            # Package the resulting APE binary
            - name: Create artifact (Linux - APE)
              run: zip hex_${{steps.current-release.outputs.tag_name}}_ape.zip hex
              if: matrix.os == 'ubuntu-latest'
            
            # Build (Windows)
            - name: Build
              run: make
              shell: bash
              if: matrix.os == 'windows-latest'
              
            # Package the resulting Windows binary
            - name: Create artifact (Windows)
              run: Compress-Archive -Path hex.exe -DestinationPath hex_${{steps.current-release.outputs.tag_name}}_windows_x86_64.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: "hex_v*.zip"
                  overwrite: true
                  tag_name: ${{steps.current-release.outputs.tag_name}}
                  release_id: ${{steps.current-release.outputs.id }}
                  verbose: true