feat: add v3 upgrade handler (#214) #726
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build & Test | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
env: | |
GOPRIVATE: github.com/milkyway-labs | |
GH_ACCESS_TOKEN: ${{ secrets.GOPRIVATE_ACCESS_TOKEN }} | |
# Cancel all previous runs of the same workflow when a new one is triggered in the same branch. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ !contains(github.ref, 'tags/')}} | |
jobs: | |
Install-tparse: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Setup Go 🧰 | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Display go version 🛂 | |
run: go version | |
- name: Setup GOPRIVATE 🛡️ | |
run: git config --global url.https://$GH_ACCESS_TOKEN@github.com/.insteadOf https://github.com/ | |
- name: Install tparse 🔍 | |
run: | | |
export GO111MODULE="on" && go install github.com/mfridman/tparse@v0.8.3 | |
- name: Cache 💾 | |
uses: actions/cache@v4 | |
with: | |
path: ~/go/bin | |
key: ${{ runner.os }}-go-tparse-binary | |
Build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
go-arch: [ "amd64" ] | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
- name: Setup Go 🧰 | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Setup GOPRIVATE 🛡️ | |
run: git config --global url.https://$GH_ACCESS_TOKEN@github.com/.insteadOf https://github.com/ | |
- name: Compute diff 📜 | |
uses: technote-space/get-diff-action@v6.1.2 | |
id: git_diff | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
- name: Build 🔨 | |
run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make build | |
Split-test-files: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
- name: Setup Go 🧰 | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Setup GOPRIVATE 🛡️ | |
run: git config --global url.https://$GH_ACCESS_TOKEN@github.com/.insteadOf https://github.com/ | |
- name: Create a file with all the pkgs 📜 | |
run: go mod tidy && go list ./... > pkgs.txt | |
- name: Split pkgs into 4 files ✂️ | |
run: split -d -n l/4 pkgs.txt pkgs.txt.part. | |
- name: Upload part 00 📤 | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "${{ github.sha }}-00" | |
path: ./pkgs.txt.part.00 | |
- name: Upload part 01 📤 | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "${{ github.sha }}-01" | |
path: ./pkgs.txt.part.01 | |
- name: Upload part 02 📤 | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "${{ github.sha }}-02" | |
path: ./pkgs.txt.part.02 | |
- name: Upload part 03 📤 | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "${{ github.sha }}-03" | |
path: ./pkgs.txt.part.03 | |
Tests: | |
runs-on: ubuntu-latest | |
needs: Split-test-files | |
strategy: | |
fail-fast: false | |
matrix: | |
part: [ "00", "01", "02", "03" ] | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
- name: Setup Go 🧰 | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Setup GOPRIVATE 🛡️ | |
run: git config --global url.https://$GH_ACCESS_TOKEN@github.com/.insteadOf https://github.com/ | |
- name: Compute diff 📜 | |
uses: technote-space/get-diff-action@v6.1.2 | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
- name: Download packages file 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}" | |
if: env.GIT_DIFF | |
- name: Test & coverage report creation 🧪 | |
run: | | |
cat pkgs.txt.part.${{ matrix.part }} | xargs go test -mod=readonly -timeout 30m -coverprofile=${{ matrix.part }}profile.out -covermode=atomic -tags='norace ledger test_ledger_mock' | |
if: env.GIT_DIFF | |
- name: Upload coverage 📤 | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}-coverage" | |
path: ./${{ matrix.part }}profile.out | |
Upload-coverage-report: | |
runs-on: ubuntu-latest | |
needs: Tests | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
- name: Compute diff 📜 | |
uses: technote-space/get-diff-action@v6.1.2 | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
- name: Download coverage 00 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-00-coverage" | |
if: env.GIT_DIFF | |
- name: Download coverage 01 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-01-coverage" | |
if: env.GIT_DIFF | |
- name: Download coverage 02 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-02-coverage" | |
if: env.GIT_DIFF | |
- name: Download coverage 03 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-03-coverage" | |
if: env.GIT_DIFF | |
- name: Join coverage 📋 | |
run: | | |
cat ./*profile.out | grep -v "mode: atomic" >> coverage.txt | |
if: env.GIT_DIFF | |
- name: Filter out DONTCOVER 🔍 | |
run: | | |
module=$(cat go.mod | grep module) | |
module=$(echo $module | sed "s/module //g") | |
excludelist="$(find ./ -type f -name '*.go' | xargs grep -l 'DONTCOVER')" | |
excludelist+=" $(find ./ -type f -name '*.pb.go')" | |
excludelist+=" $(find ./ -type f -name '*.pb.gw.go')" | |
excludelist+=" $(find ./ -type f -path './tests/mocks/*.go')" | |
for filename in ${excludelist}; do | |
filename=$(echo $filename | sed "s|^.|$module|g") | |
echo "Excluding ${filename} from coverage report..." | |
sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt | |
done | |
if: env.GIT_DIFF | |
- name: Upload coverage to Codecov 📤 | |
uses: codecov/codecov-action@v5 | |
with: | |
file: ./coverage.txt | |
if: env.GIT_DIFF | |
Test-race: | |
runs-on: ubuntu-latest | |
needs: Split-test-files | |
strategy: | |
fail-fast: false | |
matrix: | |
part: [ "00", "01", "02", "03" ] | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
- name: Setup Go 🧰 | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Setup GOPRIVATE 🛡️ | |
run: git config --global url.https://$GH_ACCESS_TOKEN@github.com/.insteadOf https://github.com/ | |
- name: Compute diff 📜 | |
uses: technote-space/get-diff-action@v6.1.2 | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
- name: Download packages file 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}" | |
if: env.GIT_DIFF | |
- name: Test & coverage report creation 🧪 | |
run: | | |
xargs --arg-file=pkgs.txt.part.${{ matrix.part }} go test -mod=readonly -json -timeout 30m -race -tags='cgo ledger test_ledger_mock' | tee ${{ matrix.part }}-race-output.txt | |
if: env.GIT_DIFF | |
- name: Upload coverage 📤 | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}-race-output" | |
path: ./${{ matrix.part }}-race-output.txt | |
Race-detector-report: | |
runs-on: ubuntu-latest | |
needs: [ Test-race, Install-tparse ] | |
timeout-minutes: 5 | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
- name: Compute diff 📜 | |
uses: technote-space/get-diff-action@v6.1.2 | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
- name: Download coverage 00 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-00-race-output" | |
if: env.GIT_DIFF | |
- name: Download coverage 01 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-01-race-output" | |
if: env.GIT_DIFF | |
- name: Download coverage 02 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-02-race-output" | |
if: env.GIT_DIFF | |
- name: Download coverage 03 📥 | |
uses: actions/download-artifact@v4 | |
with: | |
name: "${{ github.sha }}-03-race-output" | |
if: env.GIT_DIFF | |
- name: Save cache 💾 | |
uses: actions/cache@v4 | |
with: | |
path: ~/go/bin | |
key: ${{ runner.os }}-go-tparse-binary | |
if: env.GIT_DIFF | |
- name: Generate test report (go test -race) 📜 | |
run: cat ./*-race-output.txt | ~/go/bin/tparse | |
if: env.GIT_DIFF |