-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
…ctory set
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -33,6 +33,7 @@ jobs: | |
permissions: | ||
pull-requests: read | ||
outputs: | ||
affected-packages: ${{ steps.affected-modules.outputs.changes }} | ||
deployment-changes: ${{ steps.match-some.outputs.deployment == 'true' }} | ||
should-run-ci-core: ${{ steps.match-some.outputs.core-ci == 'true' || steps.match-every.outputs.non-ignored == 'true' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }} | ||
should-run-golangci: ${{ steps.match-some.outputs.golang-ci == 'true' || steps.match-every.outputs.non-ignored == 'true' || github.event_name == 'workflow_dispatch' }} | ||
|
@@ -47,7 +48,7 @@ jobs: | |
with: | ||
# "if any changed file matches one or more of the conditions" (https://github.com/dorny/paths-filter/issues/225) | ||
predicate-quantifier: some | ||
# deployment - any changes to files in `deployments/` | ||
# deployment - any changes to files in the `deployments/` | ||
# core-ci - any changes that could affect this workflow definition | ||
# golang-ci - any changes that could affect the linting result | ||
filters: | | ||
|
@@ -75,6 +76,7 @@ jobs: | |
non-ignored: | ||
- '**' | ||
- '!docs/**' | ||
- '!fuzz/**' | ||
- '!integration-tests/**' | ||
- '!tools/secrets/**' | ||
- '!tools/goreleaser-config/**' | ||
|
@@ -91,24 +93,43 @@ jobs: | |
- '!nix-darwin-shell-hook.sh' | ||
- '!LICENSE' | ||
- '!.github/**' | ||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | ||
id: affected-modules | ||
with: | ||
# to get affected packages as output (not simply `true` or `false`) | ||
# use the following syntax `package_name: 'path/to/package'` | ||
filters: | | ||
ccip: 'ccip/**' | ||
common: 'common/**' | ||
core: 'core/**' | ||
dashboard-lib: 'dashboard-lib/**' | ||
deployment: 'deployment/**' | ||
plugins: 'plugins/**' | ||
golangci: | ||
# We don't directly merge dependabot PRs, so let's not waste the resources | ||
if: ${{ (github.event_name == 'pull_request' || github.event_name == 'schedule') && github.actor != 'dependabot[bot]' }} | ||
name: lint | ||
# We don't directly merge dependabot PRs, so let's not waste the resources. | ||
# toJson/fromJson is used to account for empty array formatting differences ([], [ ], etc.) | ||
# if: ${{ (github.event_name == 'pull_request' || github.event_name == 'schedule') && github.actor != 'dependabot[bot]' && needs.filter.outputs.should-run-golangci == 'true' && (toJson(fromJson(needs.filter.outputs.affected-packages)) != '[]' && needs.filter.outputs.affected-packages != '')}} | ||
if: always() | ||
needs: [filter, run-frequency] | ||
permissions: | ||
# For golangci-lint-actions to annotate code in the PR. | ||
# To annotate code in the PR. | ||
checks: write | ||
contents: read | ||
# For golangci-lint-action's `only-new-issues` option. | ||
pull-requests: read | ||
runs-on: ubuntu-24.04-8cores-32GB-ARM | ||
needs: [filter, run-frequency] | ||
strategy: | ||
matrix: | ||
modules: ${{ fromJson(needs.filter.outputs.affected-packages) }} | ||
steps: | ||
- uses: actions/[email protected] | ||
- name: Golang Lint | ||
- name: Checkout | ||
uses: actions/[email protected] | ||
- name: Golang Lint (${{ matrix.modules }}) | ||
uses: ./.github/actions/golangci-lint | ||
if: ${{ needs.filter.outputs.should-run-golangci == 'true' }} | ||
with: | ||
go-directory: ${{ matrix.modules }} | ||
- name: Notify Slack | ||
if: ${{ failure() && needs.run-frequency.outputs.one-per-day-frequency == 'true' }} | ||
uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package ccip | ||
|
||
import ( | ||
"errors" | ||
"os" | ||
"sync" | ||
"testing" | ||
) | ||
|
||
func TestFail(t *testing.T) { | ||
if testing.Short() { | ||
t.Skip() | ||
} | ||
t.Fatal("fake failure") | ||
} | ||
|
||
func TestRace(t *testing.T) { | ||
var v int | ||
var wg sync.WaitGroup | ||
wg.Add(100) | ||
for i := 0; i < 100; i++ { | ||
go func() { | ||
defer wg.Done() | ||
v++ | ||
v-- | ||
}() | ||
} | ||
wg.Wait() | ||
t.Log(v) | ||
} | ||
|
||
func TestLint(t *testing.T) { | ||
const v1 = (true && false) && (true && false) // SQ Identical expressions should not be used on both sides of a binary operator | ||
Check failure on line 33 in ccip/fail_test.go GitHub Actions / lint (ccip)
Check failure on line 33 in ccip/fail_test.go GitHub Actions / Core Tests (go_core_race_tests)
Check failure on line 33 in ccip/fail_test.go GitHub Actions / Core Tests (go_core_race_tests)
Check failure on line 33 in ccip/fail_test.go GitHub Actions / Flakeguard Root Project / Run Tests (github.com/smartcontractkit/chainlink/v2/ccip, ubuntu-latest)
Check failure on line 33 in ccip/fail_test.go GitHub Actions / Flakeguard Root Project / Run Tests (github.com/smartcontractkit/chainlink/v2/ccip, ubuntu-latest)
Check failure on line 33 in ccip/fail_test.go GitHub Actions / Core Tests (go_core_tests)
|
||
a := 1 | ||
if !(a == 2) { // SQ boolean check should not be inverted | ||
} | ||
const UnusedVar = 1 // lint should complain for unused variable | ||
const ALL_CAPS = 10 // should be AllCaps | ||
err := os.ErrNotExist | ||
if err == os.ErrNotExist { // should use errors.Is | ||
err := errors.New("fake error") // shadowed variable | ||
t.Log(err) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package core | ||
|
||
import ( | ||
"errors" | ||
"os" | ||
"sync" | ||
"testing" | ||
) | ||
|
||
func TestFail(t *testing.T) { | ||
if testing.Short() { | ||
t.Skip() | ||
} | ||
t.Fatal("fake failure") | ||
} | ||
|
||
func TestRace(t *testing.T) { | ||
var v int | ||
var wg sync.WaitGroup | ||
wg.Add(100) | ||
for i := 0; i < 100; i++ { | ||
go func() { | ||
defer wg.Done() | ||
v++ | ||
v-- | ||
}() | ||
} | ||
wg.Wait() | ||
t.Log(v) | ||
} | ||
|
||
func TestLint(t *testing.T) { | ||
const v1 = (true && false) && (true && false) // SQ Identical expressions should not be used on both sides of a binary operator | ||
Check failure on line 33 in core/fail_test.go GitHub Actions / Core Tests (go_core_race_tests)
Check failure on line 33 in core/fail_test.go GitHub Actions / Core Tests (go_core_race_tests)
Check failure on line 33 in core/fail_test.go GitHub Actions / Core Tests (go_core_tests)
Check failure on line 33 in core/fail_test.go GitHub Actions / Core Tests (go_core_tests)
Check failure on line 33 in core/fail_test.go GitHub Actions / Flakeguard Root Project / Run Tests (github.com/smartcontractkit/chainlink/v2/core, ubuntu-latest)
|
||
a := 1 | ||
if !(a == 2) { // SQ boolean check should not be inverted | ||
} | ||
const UnusedVar = 1 // lint should complain for unused variable | ||
const ALL_CAPS = 10 // should be AllCaps | ||
err := os.ErrNotExist | ||
if err == os.ErrNotExist { // should use errors.Is | ||
err := errors.New("fake error") // shadowed variable | ||
t.Log(err) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package deployment | ||
|
||
import ( | ||
"errors" | ||
"os" | ||
"sync" | ||
"testing" | ||
) | ||
|
||
func TestFail(t *testing.T) { | ||
if testing.Short() { | ||
t.Skip() | ||
} | ||
t.Fatal("fake failure") | ||
} | ||
|
||
func TestRace(t *testing.T) { | ||
var v int | ||
var wg sync.WaitGroup | ||
wg.Add(100) | ||
for i := 0; i < 100; i++ { | ||
go func() { | ||
defer wg.Done() | ||
v++ | ||
v-- | ||
}() | ||
} | ||
wg.Wait() | ||
t.Log(v) | ||
} | ||
|
||
func TestLint(t *testing.T) { | ||
const v1 = (true && false) && (true && false) // SQ Identical expressions should not be used on both sides of a binary operator | ||
a := 1 | ||
if !(a == 2) { // SQ boolean check should not be inverted | ||
} | ||
const UnusedVar = 1 // lint should complain for unused variable | ||
const ALL_CAPS = 10 // should be AllCaps | ||
err := os.ErrNotExist | ||
if err == os.ErrNotExist { // should use errors.Is | ||
err := errors.New("fake error") // shadowed variable | ||
t.Log(err) | ||
} | ||
} |