all repos — min @ master

A small but practical concatenative programming language.

.github/workflows/test.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
name: Run automated tests

# Controls when the action will run.
on:
    # Allows you to run this workflow manually from the Actions tab
    workflow_dispatch:

jobs:
    release:
        name: "Run all tests"
        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.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' && 'macosx' || matrix.os == 'windows-latest' && 'windows'}}" >> $GITHUB_OUTPUT

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

            # Installs libraries
            - name: install musl-gcc
              run: sudo apt-get install -y musl-tools
              if: matrix.os == 'ubuntu-latest'

            # Sets path (Linux, macOS)
            - name: Update $PATH
              run: echo "$HOME/.nimble/bin" >> $GITHUB_PATH
              if: matrix.os == 'macos-latest' || 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'

            - 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 -y -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc -d:ssl -d:useOpenSsl3 --opt:size
              if: matrix.os == 'ubuntu-latest'

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

            # Build for macOS
            - name: Build (macOS)
              run: nimble build -y -d:release -d:ssl -d:useOpenSsl3 --opt:size
              if: matrix.os == 'macos-latest'

            # UPX compress (*nix) 
            - name: UPX
              uses: svenstaro/upx-action@v2
              with:
                files: |
                  min
                args: --best --force
              if: matrix.os == 'macos-latest' || 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'

            # Install tests deps
            - name: Install tests deps
              run: cd ./tests && ../min install

            # Test (*nix)
            - name: Test
              run: ./min tests/all.min
              if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'

            # Test (Windows)
            - name: Test
              run: .\min.exe tests/all.min
              if: matrix.os == 'windows-latest'