all repos — litestore @ master

A minimalist nosql document store.

.github/workflows/add-artifacts-to-current-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
 146
 147
 148
 149
 150
 151
name: Add Artifacts to Current 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 }}
    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 }}

      # Detects OS and provide Nim-friendly OS identifiers
      - name: Detect current OS
        id: os
        run: echo "::set-output name=id::${{matrix.os == 'ubuntu-latest' && 'linux' || matrix.os == 'macos-latest' && 'macosx' || matrix.os == 'windows-latest' && 'windows'}}"

      # 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
        shell: bash
        run: |
          echo "$HOME/.nimble/bin" >> $GITHUB_PATH
          echo $GITHUB_WORKSPACE >> $GITHUB_PATH

      # Sets path (Windows)
      - name: Update %PATH%
        run: |
          echo "${HOME}/.nimble/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
          echo "${GITHUB_WORKSPACE}" | 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
      - name: Install Nim
        run: |
          curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
          sh init.sh -y

      # Install HastyScribe
      - name: Install HastyScribe (macOS/Linux)
        shell: bash
        run: |
          curl https://github.com/h3rald/hastyscribe/releases/download/v1.12.3/hastyscribe_v1.12.3_${{steps.os.outputs.id}}_x64.zip -L -o hastyscribe.zip
          unzip hastyscribe.zip
          mv src/hastyscribe .

      # Temporary Windows-specific fix (missing certificates for nimble)
      - name: Install cert (temporary fix, windows only)
        run: |
          curl https://curl.se/ca/cacert.pem -L -o cacert.pem
        if: matrix.os == 'windows-latest'

      # Build for Linux
      - name: Build (Linux)
        run: nimble build -v -y --passL:-static -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --mm:refc --opt:size -d:ssl litestore
        if: matrix.os == 'ubuntu-latest'

      # Build for macOS
      - name: Build (macOS)
        shell: bash
        run: nimble build -v -y -d:release --mm:refc --opt:size -d:ssl litestore
        if: matrix.os == 'macos-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 litestore
        if: matrix.os == 'windows-latest'
      
      # Import admin directory and create default db
      - name: Import Admin
        shell: bash
        run: |
          cp -r src/admin/ admin/
          litestore -d:admin import

      # Build guide
      - name: Build guide
        shell: bash
        run: build_guide

      # Retrieve ID and Name of the current (draft) release
      - name: "Get current release"
        id: release
        uses: InsonusK/get-latest-release@v1.0.1
        with:
          myToken: ${{ github.token }}
          exclude_types: "release"
          view_top: 1

      # Package the resulting Linux/macOS binary
      - name: Create artifact (Linux, macOS)
        shell: bash
        run: zip litestore_${{steps.release.outputs.tag_name}}_${{steps.os.outputs.id}}_x64.zip litestore data.db LiteStore_UserGuide.htm
        if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'

      # Package the resulting Windows binary
      - name: Create artifact (Windows)
        run: Compress-Archive -Path litestore.exe, data.db, LiteStore_UserGuide.htm -DestinationPath litestore_${{steps.release.outputs.tag_name}}_windows_x64.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: 'litestore_v*.zip'
          overwrite: true
          tag_name: ${{steps.release.outputs.tag_name}}
          release_id: ${{steps.release.outputs.id }}
          verbose: true