name: CI on: push: branches: - "master" pull_request: branches: - "*" concurrency: # Cancel any previous workflows if they are from a PR or push. group: ${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true defaults: run: shell: bash env: # If you change this value, please change it in the following files as well: # /Dockerfile # /dev.Dockerfile GO_VERSION: 1.25.11 jobs: ######################## # frontend build checks ######################## frontend: name: frontend tests on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: node_version: [ 16.x ] os: [ ubuntu-latest, windows-latest, macOS-latest ] steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup nodejs ${{ matrix.node_version }} uses: ./.github/actions/setup-node with: node-version: '${{ matrix.node_version }}' - name: install dependencies working-directory: ./app run: yarn - name: lint code working-directory: ./app run: yarn lint - name: typescript compile working-directory: ./app run: yarn tsc - name: unit tests working-directory: ./app run: yarn test:ci ######################## # backend build checks ######################## backend: name: backend build on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: go_version: [ 1.18.x ] os: [ ubuntu-latest, windows-latest, macOS-latest ] steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup nodejs ${{ matrix.node_version }} uses: ./.github/actions/setup-node with: node-version: '${{ matrix.node_version }}' - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: build backend binary run: make build - name: build CLI binaries run: make go-install-cli ######################## # cross compilation ######################## cross-compile: name: cross compilation runs-on: ubuntu-latest strategy: fail-fast: true matrix: # Please keep this list in sync with make/release_flags.mk! include: - name: i386 sys: linux-386 - name: amd64 sys: darwin-amd64 linux-amd64 windows-amd64 - name: arm sys: darwin-arm64 linux-armv6 linux-armv7 linux-arm64 steps: - name: cleanup space run: rm -rf /opt/hostedtoolcache - name: git checkout uses: actions/checkout@v4 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: build release for all architectures (skip app build) run: make go-release sys="${{ matrix.sys }}" ######################## # proto compile check ######################## proto-compile-check: name: RPC proto compilation check runs-on: ubuntu-latest steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup nodejs ${{ matrix.node_version }} uses: ./.github/actions/setup-node with: node-version: '${{ matrix.node_version }}' - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: install dependencies working-directory: ./app run: yarn - name: run check run: make rpc-js-compile && make protos-check - name: compile rpc for golang run: make rpc - name: run check run: make mod-check ######################## # check commits ######################## check-commits: if: github.event_name == 'pull_request' name: check commits runs-on: ubuntu-latest steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: fetch and rebase on ${{ github.base_ref }} run: | git remote add upstream https://github.com/${{ github.repository }} git fetch upstream export GIT_COMMITTER_EMAIL="litd-ci@example.com" export GIT_COMMITTER_NAME="LiT CI" git rebase upstream/${{ github.base_ref }} - name: check commits run: scripts/check-each-commit.sh upstream/${{ github.base_ref }} ####################### # sql model generation ####################### sqlc-check: name: Sqlc check runs-on: ubuntu-latest steps: - name: git checkout uses: actions/checkout@v3 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: docker image cache uses: jpribyl/action-docker-layer-caching@v0.1.1 continue-on-error: true - name: Generate sql models run: make sqlc-check ######################## # lint code ######################## lint: name: lint runs-on: ubuntu-latest steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: prepare dummy static data run: mkdir -p app/build; touch app/build/index.html - name: run check run: make mod-check && make lint ######################## # unit tests ######################## unit-test: name: run unit tests runs-on: ubuntu-latest strategy: # Allow other tests in the matrix to continue if one fails. fail-fast: false matrix: unit_type: - unit-race - unit - unit dbbackend=postgres - unit dbbackend=sqlite steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' - name: run ${{ matrix.unit_type }} run: make ${{ matrix.unit_type }} ######################## # build itest binaries (cache warming) ######################## build-itest: name: build itest binaries runs-on: ubuntu-latest steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' key-prefix: itest - name: prepare dummy static data run: mkdir -p app/build; touch app/build/index.html - name: build itest binaries run: make build-itest build-itest-binary ######################## # integration tests ######################## itest: name: integration test runs-on: ubuntu-latest needs: build-itest strategy: # Allow other tests in the matrix to continue if one fails. fail-fast: false matrix: include: - name: bbolt args: itest-parallel icase=terminal dbbackend=bbolt tranches=4 - name: sqlite args: itest-parallel icase=terminal dbbackend=sqlite tranches=4 - name: postgres args: itest-parallel icase=terminal dbbackend=postgres tranches=4 steps: - name: git checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: setup nodejs ${{ matrix.node_version }} uses: ./.github/actions/setup-node with: node-version: '${{ matrix.node_version }}' - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go with: go-version: '${{ env.GO_VERSION }}' key-prefix: itest - name: install dependencies working-directory: ./app run: yarn - name: run itest ${{ matrix.name }} run: make ${{ matrix.args }} - name: Zip log files on failure if: ${{ failure() }} timeout-minutes: 5 # Note that we move the itest logs into a "logs" folder not prefixed by # a dot character (.) to ensure that they dir doesn't appear as a # hidden folder when being downloaded. run: | mkdir -p itest/logs cp -R itest/.logs/. itest/logs/ 7z a logs-itest-${{ matrix.name }}.zip itest/logs itest/*.log - name: Upload log files on failure uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: logs-itest-${{ matrix.name }} path: logs-itest-${{ matrix.name }}.zip retention-days: 5 ######################## # check PR updates release notes ######################## release-notes-check: name: check release notes updated runs-on: ubuntu-latest if: '!contains(github.event.pull_request.labels.*.name, ''no-changelog'')' steps: - name: git checkout uses: actions/checkout@v4 - name: release notes check run: scripts/check-release-notes.sh