Build Finschia layer-2 binary #772
Workflow file for this run
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: Tests / Code Coverage | |
# Tests / Code Coverage workflow runs unit tests and uploads a code coverage report | |
# This workflow is run on pushes to master & every Pull Requests where a .go, .mod, .sum have been changed | |
env: | |
GOPRIVATE: "github.com/Finschia" | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
jobs: | |
cleanup-runs: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: rokroskar/workflow-run-cleanup-action@master | |
env: | |
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" | |
if: "!startsWith(github.ref, 'refs/tags/') && github.ref != 'refs/heads/main'" | |
install-tparse: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- name: Display go version | |
run: go version | |
- name: install tparse | |
run: | | |
export GO111MODULE="on" && go install github.com/mfridman/[email protected] | |
- uses: actions/[email protected] | |
with: | |
path: ~/go/bin | |
key: ${{ runner.os }}-go-tparse-binary | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
go-arch: ["amd64"] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- name: Setup ssh config | |
env: | |
SSH_KEY: ${{secrets.PRIVATE_REPO_SSH_KEY}} | |
run: | | |
mkdir -p ~/.ssh | |
echo "$SSH_KEY" > ~/.ssh/id_rsa | |
chmod 600 ~/.ssh/id_rsa | |
- name: Setup access for private go modules | |
run: | | |
git config --global url."ssh://[email protected]/".insteadOf https://github.com/ | |
- name: Build | |
run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make build | |
if: env.GIT_DIFF | |
split-test-files: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- name: Create a file with all the pkgs | |
run: go list ./... > pkgs.txt | |
- name: Split pkgs into 4 files | |
run: split -d -n l/4 pkgs.txt pkgs.txt.part. | |
# cache multiple | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ github.sha }}-00" | |
path: ./pkgs.txt.part.00 | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ github.sha }}-01" | |
path: ./pkgs.txt.part.01 | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ github.sha }}-02" | |
path: ./pkgs.txt.part.02 | |
- uses: actions/upload-artifact@v3 | |
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: Setup ssh config | |
env: | |
SSH_KEY: ${{secrets.PRIVATE_REPO_SSH_KEY}} | |
run: | | |
mkdir -p ~/.ssh | |
echo "$SSH_KEY" > ~/.ssh/id_rsa | |
chmod 600 ~/.ssh/id_rsa | |
- name: Setup access for private go modules | |
run: | | |
git config --global url."ssh://[email protected]/".insteadOf https://github.com/ | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}" | |
if: env.GIT_DIFF | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install -y build-essential libtool autoconf automake | |
- 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='ledger test_ledger_mock goleveldb gcc' | |
if: env.GIT_DIFF | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}-coverage" | |
path: ./${{ matrix.part }}profile.out | |
upload-coverage-report: | |
runs-on: ubuntu-latest | |
needs: tests | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-00-coverage" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-01-coverage" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-02-coverage" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-03-coverage" | |
if: env.GIT_DIFF | |
- run: | | |
cat ./*profile.out | grep -v "mode: atomic" >> coverage.txt | |
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')" | |
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/^./github.com\/Finschia\/finschia/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/[email protected] | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
file: ./coverage.txt | |
if: env.GIT_DIFF | |
test-integration: | |
runs-on: ubuntu-latest | |
needs: split-test-files | |
strategy: | |
fail-fast: false | |
matrix: | |
part: ["00", "01", "02", "03"] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}" | |
if: env.GIT_DIFF | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install -y build-essential libtool autoconf automake | |
- name: test & coverage report creation | |
run: | | |
xargs --arg-file=pkgs.txt.part.${{ matrix.part }} go test -mod=readonly -json -timeout 30m -tags='cli_test goleveldb gcc' | tee ${{ matrix.part }}-integration-output.txt | |
if: env.GIT_DIFF | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}-integration-output" | |
path: ./${{ matrix.part }}-integration-output.txt | |
test-integration-report: | |
runs-on: ubuntu-latest | |
needs: [test-integration, install-tparse] | |
timeout-minutes: 5 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-00-integration-output" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-01-integration-output" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-02-integration-output" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-03-integration-output" | |
if: env.GIT_DIFF | |
- uses: actions/[email protected] | |
with: | |
path: ~/go/bin | |
key: ${{ runner.os }}-go-tparse-binary | |
if: env.GIT_DIFF | |
- name: Generate integration test report | |
run: cat ./*-integration-output.txt | ~/go/bin/tparse | |
if: env.GIT_DIFF | |
test-integration-multi-node: | |
runs-on: ubuntu-latest | |
needs: split-test-files | |
strategy: | |
fail-fast: false | |
matrix: | |
part: ["00", "01", "02", "03"] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}" | |
if: env.GIT_DIFF | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install -y build-essential libtool autoconf automake | |
- name: test report creation | |
run: | | |
xargs --arg-file=pkgs.txt.part.${{ matrix.part }} go test -mod=readonly -json -timeout 30m -tags='cli_multi_node_test goleveldb' | tee ${{ matrix.part }}-integration-multi-node-output.txt | |
if: env.GIT_DIFF | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ github.sha }}-${{ matrix.part }}-integration-multi-node-output" | |
path: ./${{ matrix.part }}-integration-multi-node-output.txt | |
test_integration_multi_node_report: | |
runs-on: ubuntu-latest | |
needs: [test-integration-multi-node, install-tparse] | |
timeout-minutes: 5 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: technote-space/[email protected] | |
with: | |
PATTERNS: | | |
**/**.go | |
go.mod | |
go.sum | |
.github/workflows/test.yml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-00-integration-multi-node-output" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-01-integration-multi-node-output" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-02-integration-multi-node-output" | |
if: env.GIT_DIFF | |
- uses: actions/download-artifact@v3 | |
with: | |
name: "${{ github.sha }}-03-integration-multi-node-output" | |
if: env.GIT_DIFF | |
- uses: actions/[email protected] | |
with: | |
path: ~/go/bin | |
key: ${{ runner.os }}-go-tparse-binary | |
if: env.GIT_DIFF | |
- name: Generate multi node integration test report | |
run: cat ./*-integration-multi-node-output.txt | ~/go/bin/tparse | |
if: env.GIT_DIFF | |
# test-localnet-blocks: | |
# runs-on: ubuntu-latest | |
# needs: [build, tests] | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: actions/setup-go@v4 | |
# with: | |
# go-version: '1.20' | |
# - name: Install docker-compose | |
# run: sudo apt-get update && sudo apt-get install -y docker-compose | |
# - name: Start localnet | |
# run: | | |
# make localnet-start | |
# - name: Test blocks | |
# id: test-blocks | |
# continue-on-error: true | |
# run: ./networks/localnet-blocks-test.sh 40 5 10 localhost | |
# - name: Stop localnet | |
# run: | | |
# make localnet-stop | |
# if [ ${{ steps.test-blocks.outcome }} == 'failure' ] ; then | |
# exit 1 | |
# fi |