-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
321 additions
and
66 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,67 +1,298 @@ | ||
name: Build & Test | ||
on: | ||
pull_request: | ||
paths: | ||
- "**.go" | ||
- "**.mv" | ||
- "**.move" | ||
push: | ||
branches: | ||
- main | ||
- "release/*" | ||
paths: | ||
- "**.go" | ||
- "**.mv" | ||
- "**.move" | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
test-coverage-upload: | ||
name: Run test and upload codecov | ||
env: | ||
# for private repo access | ||
GOPRIVATE: github.com/initia-labs/* | ||
GITHUB_ACCESS_TOKEN: ${{ secrets.GH_READ_TOKEN }} | ||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | ||
Cleanup-runs: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Cleanup 🧹 | ||
uses: rokroskar/workflow-run-cleanup-action@master | ||
env: | ||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" | ||
if: "!startsWith(github.ref, 'refs/tags/') && github.ref != 'refs/heads/master'" | ||
|
||
Install-tparse: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Setup Go 🧰 | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: '1.22' | ||
|
||
- name: Display go version 🛂 | ||
run: go version | ||
|
||
- name: Install tparse 🔍 | ||
run: | | ||
export GO111MODULE="on" && go install github.com/mfridman/[email protected] | ||
- 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.22' | ||
|
||
- name: Compute diff 📜 | ||
uses: technote-space/[email protected] | ||
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: 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: | ||
- uses: actions/setup-go@v3 | ||
- name: Checkout 🛎️ | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Go 🧰 | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: 1.22 | ||
- name: Install openssl | ||
run: sudo apt-get install libssl-dev | ||
- uses: actions/checkout@v3 | ||
- uses: technote-space/get-diff-action@v4 | ||
go-version: '1.22' | ||
|
||
- name: Compute diff 📜 | ||
uses: technote-space/[email protected] | ||
with: | ||
PATTERNS: | | ||
**/**.go | ||
go.mod | ||
go.sum | ||
# for private repo access | ||
- run: git config --global url.https://${GITHUB_ACCESS_TOKEN}:[email protected]/.insteadOf https://github.com/ | ||
- name: build | ||
- 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: | | ||
make build | ||
- name: test & coverage report creation | ||
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/[email protected] | ||
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: | | ||
go test ./... -mod=readonly -timeout 12m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' | ||
if: env.GIT_DIFF | ||
# - name: filter out DONTCOVER | ||
# run: | | ||
# excludelist="$(find ./ -type f -name '*.go' | xargs grep -l 'DONTCOVER')" | ||
# excludelist+=" $(find ./ -type f -name '*.pb.go')" | ||
# for filename in ${excludelist}; do | ||
# filename=$(echo $filename | sed 's/^./github.com\/initia-labs\/initia/g') | ||
# echo "Excluding ${filename} from coverage report..." | ||
# sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt | ||
# done | ||
# if: env.GIT_DIFF | ||
- uses: codecov/codecov-action@v3 | ||
with: | ||
token: ${{ secrets.CODECOV_TOKEN }} | ||
files: ./coverage.txt | ||
fail_ci_if_error: true | ||
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@v4 | ||
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.22' | ||
|
||
- name: Compute diff 📜 | ||
uses: technote-space/[email protected] | ||
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/[email protected] | ||
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 |
Oops, something went wrong.