mirror of
https://github.com/lightninglabs/lightning-terminal.git
synced 2026-08-13 12:33:36 +02:00
The frontend job was pinned to node 16, which is old enough that some of the packages patched in this branch refuse to install there. tar and esbuild want node 18 or newer, serialize-javascript wants 20. Node was also only pinned in the frontend job. The backend, proto-compile-check and itest jobs all reference matrix.node_version without declaring it in their matrix, so the expression resolved to an empty string and setup-node fell back to whatever the runner happened to ship. Two of those run `yarn install --frozen-lockfile`, so they need a known version too. Both are fixed by a NODE_VERSION env var, matching how GO_VERSION is already handled. It replaces the matrix entry rather than feeding it, because the env context isn't available inside strategy.matrix.
380 lines
9.9 KiB
YAML
380 lines
9.9 KiB
YAML
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
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
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
|
|
|
|
# Only applies to the CI jobs below. The note above covers GO_VERSION alone:
|
|
# /Dockerfile and /dev.Dockerfile pin their own Node version for release
|
|
# builds, and it does not have to match this one.
|
|
NODE_VERSION: 24.x
|
|
|
|
jobs:
|
|
########################
|
|
# frontend build checks
|
|
########################
|
|
frontend:
|
|
name: frontend tests on ${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, windows-latest, macOS-latest ]
|
|
|
|
steps:
|
|
- name: git checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: setup nodejs ${{ env.NODE_VERSION }}
|
|
uses: ./.github/actions/setup-node
|
|
with:
|
|
node-version: '${{ env.NODE_VERSION }}'
|
|
|
|
- name: install dependencies
|
|
working-directory: ./app
|
|
run: yarn install --frozen-lockfile
|
|
|
|
- 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 ${{ env.NODE_VERSION }}
|
|
uses: ./.github/actions/setup-node
|
|
with:
|
|
node-version: '${{ env.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 ${{ env.NODE_VERSION }}
|
|
uses: ./.github/actions/setup-node
|
|
with:
|
|
node-version: '${{ env.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 install --frozen-lockfile
|
|
|
|
- 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 }}
|
|
env:
|
|
BASE_REF: ${{ github.base_ref }}
|
|
REPOSITORY: ${{ github.repository }}
|
|
run: |
|
|
git remote add upstream "https://github.com/${REPOSITORY}"
|
|
git fetch upstream
|
|
export GIT_COMMITTER_EMAIL="litd-ci@example.com"
|
|
export GIT_COMMITTER_NAME="LiT CI"
|
|
git rebase "upstream/${BASE_REF}"
|
|
|
|
- name: check commits
|
|
env:
|
|
BASE_REF: ${{ github.base_ref }}
|
|
run: scripts/check-each-commit.sh "upstream/${BASE_REF}"
|
|
|
|
#######################
|
|
# sql model generation
|
|
#######################
|
|
sqlc-check:
|
|
name: Sqlc check
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- 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: docker image cache
|
|
uses: jpribyl/action-docker-layer-caching@c632825d12ec837065f49726ea27ddd40bcc7894 # 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 ${{ env.NODE_VERSION }}
|
|
uses: ./.github/actions/setup-node
|
|
with:
|
|
node-version: '${{ env.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 install --frozen-lockfile
|
|
|
|
- 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
|