-
Notifications
You must be signed in to change notification settings - Fork 0
146 lines (126 loc) · 4.74 KB
/
main.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
name: Build and Test
on:
push:
branches:
- dev
- stage
- main
- release**
pull_request:
jobs:
job_go_checks:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Print github env vars
run: |
echo github.event_name: ${{ github.event_name }}
echo github.ref: ${{ github.ref }}
echo github.ref_name: ${{ github.ref_name }}
echo github.head_ref: ${{ github.head_ref }}
echo github.base_ref: ${{ github.base_ref }}
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go environment
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Tidy go module
run: |
go mod tidy
if [[ $(git status --porcelain) ]]; then
git diff
echo
echo "go mod tidy made these changes, please run 'go mod tidy' and include those changes in a commit"
exit 1
fi
- name: Run gofumpt
# Run gofumpt first, as it's quick and issues are common.
run: diff -u <(echo -n) <(go run mvdan.cc/[email protected] -d .)
- name: Run go vet
run: go vet ./...
- name: Run go generate
run: |
go generate ./...
if [[ $(git status --porcelain) ]]; then
git diff
echo
echo "go generate made these changes, please run 'go generate ./...' and include those changes in a commit"
exit 1
fi
- name: Run staticcheck
run: |
go install honnef.co/go/tools/cmd/[email protected]
staticcheck -debug.version
staticcheck ./... 2> staticcheck-stderr
- name: Check staticcheck stderr (this step isn't needed because we are using actions/setup-go@v5 on GitHub hosted runner)
run: |
if cat staticcheck-stderr | grep "matched no packages" ; then
echo "staticcheck step did nothing, due to https://github.com/vocdoni/vocdoni-node/issues/444"
echo "Please re-run job."
# seize the opportunity to fix the underlying problem: a permissions error in ~/.cache
epoch=$(date +%s)
if [ -d ~/.cache ] && find ~/.cache -not -user `id --user` -print0 | grep -qz . ; then
echo "~/.cache had broken permissions, moving it away... (cache will be rebuilt with usage)"
mv -v ~/.cache ~/.cache-broken-by-root-$epoch
fi
exit 2
fi
job_go_test:
runs-on: [self-hosted, z]
env:
LOG_PANIC_ON_INVALIDCHARS: true # check that log lines contain no invalid chars
steps:
- uses: actions/checkout@v4
- uses: benjlevesque/[email protected]
# sets env.SHA to the first 7 chars of github.sha
- uses: actions/setup-go@v5
with:
go-version: '1.23'
# Step to detect changes in /circuits
- name: Check if /circuits changed
id: check_circuits
run: |
# Decide what to compare against based on event type
if [ "${{ github.event_name }}" = "pull_request" ]; then
# For PRs, compare HEAD with base branch
git fetch origin ${{ github.base_ref }} --depth=1
DIFF_TARGET="origin/${{ github.base_ref }}"
else
# For pushes, compare HEAD with HEAD^
DIFF_TARGET="HEAD^"
fi
echo "Comparing HEAD to $DIFF_TARGET"
if git diff --name-only "$DIFF_TARGET" HEAD | grep '^circuits/'; then
echo "RUN_CIRCUIT_TESTS=true" >> "$GITHUB_ENV"
echo "Found changes under /circuits."
else
echo "RUN_CIRCUIT_TESTS=false" >> "$GITHUB_ENV"
echo "No changes under /circuits."
fi
- run: mkdir -p "$PWD/gocoverage-unit/"
- name: Run Go test -race
id: go-test-race
# note that -race can easily make the crypto stuff 10x slower
# this is further limited to selected branches at the beginning of this file
if: github.event_name == 'push' && github.ref != 'refs/heads/release'
env:
GORACE: atexit_sleep_ms=10 # the default of 1000 makes every Go package test sleep for 1s
RUN_CIRCUIT_TESTS: ${{ env.RUN_CIRCUIT_TESTS }}
run: |
go test ./... \
-race \
-timeout=1h \
-vet=off \
-cover \
-coverpkg=./... \
-covermode=atomic \
-args -test.gocoverdir="$PWD/gocoverage-unit/"
- name: Run Go test
if: steps.go-test-race.outcome == 'skipped'
# quicker, non-race test in case it's a PR or push to dev
env:
RUN_CIRCUIT_TESTS: ${{ env.RUN_CIRCUIT_TESTS }}
run: go test ./... -timeout=1h