Skip to content

Commit

Permalink
Explicitly check licenses in CI (#1212)
Browse files Browse the repository at this point in the history
* Explicitly check licenses in CI

Signed-off-by: Jose Vazquez <[email protected]>

* Update .github/workflows/test-forked.yml

Co-authored-by: Helder Santana <[email protected]>

---------

Signed-off-by: Jose Vazquez <[email protected]>
Co-authored-by: Helder Santana <[email protected]>
  • Loading branch information
josvazg and helderjs authored Nov 17, 2023
1 parent a1e83b5 commit 93cbf28
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 32 deletions.
41 changes: 41 additions & 0 deletions .github/workflows/check-licenses.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Check Licenses

on:
workflow_call:
inputs:
forked:
type: boolean
required: false
default: false

jobs:
check-licenses:
name: Check Licenses
runs-on: ubuntu-latest
steps:
- if: ${{ inputs.forked == false }}
uses: actions/checkout@v4

- if: ${{ inputs.forked == true }}
uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.head.sha}}
repository: ${{github.event.pull_request.head.repo.full_name}}

- name: Cache multiple paths
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-build-${{ hashFiles('**/go.sum') }}

- name: Setup Go
uses: actions/setup-go@v4
with:
go-version-file: "${{ github.workspace }}/go.mod"

- run: go version

- name: Run testing
run: make check-licenses
5 changes: 5 additions & 0 deletions .github/workflows/test-forked.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ jobs:
with:
forked: true

check-licenses:
uses: ./.github/workflows/check-licenses.yml
with:
forked: true

paths-filter:
uses: ./.github/workflows/paths-filter.yml

Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ jobs:
uses: ./.github/workflows/test-unit.yml
with:
forked: false

check-licenses:
uses: ./.github/workflows/check-licenses.yml
with:
forked: false

paths-filter:
uses: ./.github/workflows/paths-filter.yml
Expand Down
27 changes: 20 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -98,25 +98,38 @@ help: ## Show this help screen
.PHONY: all
all: manager ## Build all binaries

$(GO-LICENSES):
$(TIMESTAMPS_DIR)/go-licenses-installed:
go install github.com/google/go-licenses@latest
@mkdir -p $(TIMESTAMPS_DIR) && touch $@

go-licenses: $(TIMESTAMPS_DIR)/go-licenses-installed

licenses.csv: $(GO_SOURCES) go.mod ## Track licenses in a CSV file
licenses.csv: $(TIMESTAMPS_DIR)/go-licenses-installed go.mod ## Track licenses in a CSV file
@echo "Tracking licenses into file $@"
@echo "========================================"
$(GO_LICENSES) csv --include_tests $(BASE_GO_PACKAGE)/... > $@

GOOS=linux GOARCH=amd64 go mod download
GOOS=linux GOARCH=amd64 $(GO_LICENSES) csv --include_tests $(BASE_GO_PACKAGE)/... > $@

# We only check that go.mod is NOT newer than licenses.csv because the CI
# tends to generate slightly different results, so content comparison wouldn't work
licenses-tracked: ## Checks license.csv is up to date
@if [ go.mod -nt licenses.csv ]; then \
echo "License.csv is stale! Please run 'make licenses.csv' and commit"; exit 1; \
else echo "License.csv OK (up to date)"; fi

.PHONY: check-licenses
check-licenses: licenses.csv ## Check licenses
check-license-compliance: licenses.csv ## Check licenses are compliant with our restrictions
@echo "Checking licenses not to be: $(DISALLOWED_LICENSES)"
@echo "============================================"
$(GO_LICENSES) check --include_tests $(BASE_GO_PACKAGE)/... \
GOOS=linux GOARCH=amd64 $(GO_LICENSES) check --include_tests $(BASE_GO_PACKAGE)/... \
--disallowed_types $(DISALLOWED_LICENSES)
@echo "--------------------"
@echo "Licenses check: PASS"

check-licenses: licenses-tracked check-license-compliance ## Check license tracking & compliance

.PHONY: unit-test
unit-test: check-licenses actions.txt
unit-test:
go test -race -cover $(GO_UNIT_TEST_FOLDERS)

.PHONY: int-test
Expand Down
50 changes: 25 additions & 25 deletions licenses.csv
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
cloud.google.com/go/compute/apiv1,https://github.com/googleapis/google-cloud-go/blob/compute/v1.23.2/compute/apiv1/license_codes_client.go,Apache-2.0
cloud.google.com/go/compute/internal,https://github.com/googleapis/google-cloud-go/blob/compute/v1.23.2/compute/LICENSE,Apache-2.0
cloud.google.com/go/compute/apiv1,https://github.com/googleapis/google-cloud-go/blob/compute/v1.23.3/compute/apiv1/license_codes_client.go,Apache-2.0
cloud.google.com/go/compute/internal,https://github.com/googleapis/google-cloud-go/blob/compute/v1.23.3/compute/LICENSE,Apache-2.0
cloud.google.com/go/compute/metadata,https://github.com/googleapis/google-cloud-go/blob/compute/metadata/v0.2.3/compute/metadata/LICENSE,Apache-2.0
cloud.google.com/go/iam,https://github.com/googleapis/google-cloud-go/blob/iam/v1.1.2/iam/LICENSE,Apache-2.0
cloud.google.com/go/kms,https://github.com/googleapis/google-cloud-go/blob/kms/v1.15.4/kms/LICENSE,Apache-2.0
cloud.google.com/go/iam,https://github.com/googleapis/google-cloud-go/blob/iam/v1.1.3/iam/LICENSE,Apache-2.0
cloud.google.com/go/kms,https://github.com/googleapis/google-cloud-go/blob/kms/v1.15.5/kms/LICENSE,Apache-2.0
github.com/Azure/azure-sdk-for-go,https://github.com/Azure/azure-sdk-for-go/blob/v68.0.0/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/azcore,https://github.com/Azure/azure-sdk-for-go/blob/sdk/azcore/v1.8.0/sdk/azcore/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/azcore,https://github.com/Azure/azure-sdk-for-go/blob/sdk/azcore/v1.9.0/sdk/azcore/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/azidentity,https://github.com/Azure/azure-sdk-for-go/blob/sdk/azidentity/v1.4.0/sdk/azidentity/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/internal,https://github.com/Azure/azure-sdk-for-go/blob/sdk/internal/v1.3.0/sdk/internal/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/internal,https://github.com/Azure/azure-sdk-for-go/blob/sdk/internal/v1.5.0/sdk/internal/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault,https://github.com/Azure/azure-sdk-for-go/blob/sdk/resourcemanager/keyvault/armkeyvault/v1.3.0/sdk/resourcemanager/keyvault/armkeyvault/LICENSE.txt,MIT
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2,https://github.com/Azure/azure-sdk-for-go/blob/sdk/resourcemanager/network/armnetwork/v2.2.1/sdk/resourcemanager/network/armnetwork/LICENSE.txt,MIT
github.com/Azure/go-autorest/autorest,https://github.com/Azure/go-autorest/blob/autorest/v0.11.29/autorest/LICENSE,Apache-2.0
Expand All @@ -20,8 +20,8 @@ github.com/Azure/go-autorest/logger,https://github.com/Azure/go-autorest/blob/lo
github.com/Azure/go-autorest/tracing,https://github.com/Azure/go-autorest/blob/tracing/v0.6.0/tracing/LICENSE,Apache-2.0
github.com/AzureAD/microsoft-authentication-library-for-go/apps,https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/v1.1.1/LICENSE,MIT
github.com/Masterminds/semver,https://github.com/Masterminds/semver/blob/v1.5.0/LICENSE.txt,MIT
github.com/aws/aws-sdk-go,https://github.com/aws/aws-sdk-go/blob/v1.46.7/LICENSE.txt,Apache-2.0
github.com/aws/aws-sdk-go/internal/sync/singleflight,https://github.com/aws/aws-sdk-go/blob/v1.46.7/internal/sync/singleflight/LICENSE,BSD-3-Clause
github.com/aws/aws-sdk-go,https://github.com/aws/aws-sdk-go/blob/v1.47.10/LICENSE.txt,Apache-2.0
github.com/aws/aws-sdk-go/internal/sync/singleflight,https://github.com/aws/aws-sdk-go/blob/v1.47.10/internal/sync/singleflight/LICENSE,BSD-3-Clause
github.com/beorn7/perks/quantile,https://github.com/beorn7/perks/blob/v1.0.1/LICENSE,MIT
github.com/cespare/xxhash/v2,https://github.com/cespare/xxhash/blob/v2.2.0/LICENSE.txt,MIT
github.com/davecgh/go-spew/spew,https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE,ISC
Expand All @@ -30,7 +30,7 @@ github.com/emicklei/go-restful/v3,https://github.com/emicklei/go-restful/blob/v3
github.com/evanphx/json-patch,https://github.com/evanphx/json-patch/blob/v5.6.0/LICENSE,BSD-3-Clause
github.com/evanphx/json-patch/v5,https://github.com/evanphx/json-patch/blob/v5.6.0/v5/LICENSE,BSD-3-Clause
github.com/fsnotify/fsnotify,https://github.com/fsnotify/fsnotify/blob/v1.6.0/LICENSE,BSD-3-Clause
github.com/go-logr/logr,https://github.com/go-logr/logr/blob/v1.2.4/LICENSE,Apache-2.0
github.com/go-logr/logr,https://github.com/go-logr/logr/blob/v1.3.0/LICENSE,Apache-2.0
github.com/go-logr/zapr,https://github.com/go-logr/zapr/blob/v1.2.4/LICENSE,Apache-2.0
github.com/go-openapi/jsonpointer,https://github.com/go-openapi/jsonpointer/blob/v0.19.6/LICENSE,Apache-2.0
github.com/go-openapi/jsonreference,https://github.com/go-openapi/jsonreference/blob/v0.20.1/LICENSE,Apache-2.0
Expand All @@ -48,15 +48,15 @@ github.com/google/go-querystring/query,https://github.com/google/go-querystring/
github.com/google/gofuzz,https://github.com/google/gofuzz/blob/v1.2.0/LICENSE,Apache-2.0
github.com/google/s2a-go,https://github.com/google/s2a-go/blob/v0.1.7/LICENSE.md,Apache-2.0
github.com/google/uuid,https://github.com/google/uuid/blob/v1.4.0/LICENSE,BSD-3-Clause
github.com/googleapis/enterprise-certificate-proxy/client,https://github.com/googleapis/enterprise-certificate-proxy/blob/v0.3.1/LICENSE,Apache-2.0
github.com/googleapis/enterprise-certificate-proxy/client,https://github.com/googleapis/enterprise-certificate-proxy/blob/v0.3.2/LICENSE,Apache-2.0
github.com/googleapis/gax-go/v2,https://github.com/googleapis/gax-go/blob/v2.12.0/v2/LICENSE,BSD-3-Clause
github.com/imdario/mergo,https://github.com/imdario/mergo/blob/v0.3.12/LICENSE,BSD-3-Clause
github.com/jmespath/go-jmespath,https://github.com/jmespath/go-jmespath/blob/v0.4.0/LICENSE,Apache-2.0
github.com/josharian/intern,https://github.com/josharian/intern/blob/v1.0.0/license.md,MIT
github.com/json-iterator/go,https://github.com/json-iterator/go/blob/v1.1.12/LICENSE,MIT
github.com/klauspost/compress,https://github.com/klauspost/compress/blob/v1.15.9/LICENSE,Apache-2.0
github.com/klauspost/compress/internal/snapref,https://github.com/klauspost/compress/blob/v1.15.9/internal/snapref/LICENSE,BSD-3-Clause
github.com/klauspost/compress/zstd/internal/xxhash,https://github.com/klauspost/compress/blob/v1.15.9/zstd/internal/xxhash/LICENSE.txt,MIT
github.com/klauspost/compress,https://github.com/klauspost/compress/blob/v1.14.4/LICENSE,Apache-2.0
github.com/klauspost/compress/internal/snapref,https://github.com/klauspost/compress/blob/v1.14.4/internal/snapref/LICENSE,BSD-3-Clause
github.com/klauspost/compress/zstd/internal/xxhash,https://github.com/klauspost/compress/blob/v1.14.4/zstd/internal/xxhash/LICENSE.txt,MIT
github.com/kylelemons/godebug,https://github.com/kylelemons/godebug/blob/v1.1.0/LICENSE,Apache-2.0
github.com/mailru/easyjson,https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE,MIT
github.com/matttproud/golang_protobuf_extensions/pbutil,https://github.com/matttproud/golang_protobuf_extensions/blob/v1.0.2/LICENSE,Apache-2.0
Expand All @@ -67,13 +67,13 @@ github.com/mongodb-forks/digest,https://github.com/mongodb-forks/digest/blob/v1.
github.com/mongodb/mongodb-atlas-kubernetes,https://github.com/mongodb/mongodb-atlas-kubernetes/blob/HEAD/LICENSE,Apache-2.0
github.com/montanaflynn/stats,https://github.com/montanaflynn/stats/blob/v0.7.0/LICENSE,MIT
github.com/munnerz/goautoneg,https://github.com/munnerz/goautoneg/blob/a7dc8b61c822/LICENSE,BSD-3-Clause
github.com/onsi/ginkgo/v2,https://github.com/onsi/ginkgo/blob/v2.13.0/LICENSE,MIT
github.com/onsi/gomega,https://github.com/onsi/gomega/blob/v1.28.1/LICENSE,MIT
github.com/onsi/ginkgo/v2,https://github.com/onsi/ginkgo/blob/v2.13.1/LICENSE,MIT
github.com/onsi/gomega,https://github.com/onsi/gomega/blob/v1.30.0/LICENSE,MIT
github.com/pkg/browser,https://github.com/pkg/browser/blob/681adbf594b8/LICENSE,BSD-2-Clause
github.com/pkg/errors,https://github.com/pkg/errors/blob/v0.9.1/LICENSE,BSD-2-Clause
github.com/pmezard/go-difflib/difflib,https://github.com/pmezard/go-difflib/blob/v1.0.0/LICENSE,BSD-3-Clause
github.com/prometheus/client_golang/prometheus,https://github.com/prometheus/client_golang/blob/v1.14.0/LICENSE,Apache-2.0
github.com/prometheus/client_model/go,https://github.com/prometheus/client_model/blob/v0.4.0/LICENSE,Apache-2.0
github.com/prometheus/client_model/go,https://github.com/prometheus/client_model/blob/v0.3.0/LICENSE,Apache-2.0
github.com/prometheus/common,https://github.com/prometheus/common/blob/v0.37.0/LICENSE,Apache-2.0
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg,https://github.com/prometheus/common/blob/v0.37.0/internal/bitbucket.org/ww/goautoneg/README.txt,BSD-3-Clause
github.com/prometheus/procfs,https://github.com/prometheus/procfs/blob/v0.8.0/LICENSE,Apache-2.0
Expand All @@ -84,26 +84,26 @@ github.com/xdg-go/pbkdf2,https://github.com/xdg-go/pbkdf2/blob/v1.0.0/LICENSE,Ap
github.com/xdg-go/scram,https://github.com/xdg-go/scram/blob/v1.1.2/LICENSE,Apache-2.0
github.com/xdg-go/stringprep,https://github.com/xdg-go/stringprep/blob/v1.0.4/LICENSE,Apache-2.0
github.com/youmark/pkcs8,https://github.com/youmark/pkcs8/blob/1326539a0a0a/LICENSE,MIT
go.mongodb.org/atlas/mongodbatlas,https://github.com/mongodb/go-client-mongodb-atlas/blob/v0.34.0/LICENSE,Apache-2.0
go.mongodb.org/mongo-driver,https://github.com/mongodb/mongo-go-driver/blob/v1.12.1/LICENSE,Apache-2.0
go.mongodb.org/atlas/mongodbatlas,https://github.com/mongodb/go-client-mongodb-atlas/blob/v0.35.0/LICENSE,Apache-2.0
go.mongodb.org/mongo-driver,https://github.com/mongodb/mongo-go-driver/blob/v1.13.0/LICENSE,Apache-2.0
go.opencensus.io,https://github.com/census-instrumentation/opencensus-go/blob/v0.24.0/LICENSE,Apache-2.0
go.uber.org/multierr,https://github.com/uber-go/multierr/blob/v1.10.0/LICENSE.txt,MIT
go.uber.org/zap,https://github.com/uber-go/zap/blob/v1.26.0/LICENSE.txt,MIT
golang.org/x/crypto,https://cs.opensource.google/go/x/crypto/+/v0.14.0:LICENSE,BSD-3-Clause
golang.org/x/exp,https://cs.opensource.google/go/x/exp/+/2e198f4a:LICENSE,BSD-3-Clause
golang.org/x/net,https://cs.opensource.google/go/x/net/+/v0.17.0:LICENSE,BSD-3-Clause
golang.org/x/oauth2,https://cs.opensource.google/go/x/oauth2/+/v0.13.0:LICENSE,BSD-3-Clause
golang.org/x/sync,https://cs.opensource.google/go/x/sync/+/v0.4.0:LICENSE,BSD-3-Clause
golang.org/x/sys/unix,https://cs.opensource.google/go/x/sys/+/v0.13.0:LICENSE,BSD-3-Clause
golang.org/x/sync,https://cs.opensource.google/go/x/sync/+/v0.5.0:LICENSE,BSD-3-Clause
golang.org/x/sys,https://cs.opensource.google/go/x/sys/+/v0.14.0:LICENSE,BSD-3-Clause
golang.org/x/term,https://cs.opensource.google/go/x/term/+/v0.13.0:LICENSE,BSD-3-Clause
golang.org/x/text,https://cs.opensource.google/go/x/text/+/v0.13.0:LICENSE,BSD-3-Clause
golang.org/x/time/rate,https://cs.opensource.google/go/x/time/+/v0.3.0:LICENSE,BSD-3-Clause
gomodules.xyz/jsonpatch/v2,https://github.com/gomodules/jsonpatch/blob/v2.2.0/v2/LICENSE,Apache-2.0
google.golang.org/api,https://github.com/googleapis/google-api-go-client/blob/v0.148.0/LICENSE,BSD-3-Clause
google.golang.org/api/internal/third_party/uritemplates,https://github.com/googleapis/google-api-go-client/blob/v0.148.0/internal/third_party/uritemplates/LICENSE,BSD-3-Clause
google.golang.org/genproto/googleapis,https://github.com/googleapis/go-genproto/blob/d307bd883b97/LICENSE,Apache-2.0
google.golang.org/genproto/googleapis/api,https://github.com/googleapis/go-genproto/blob/d307bd883b97/googleapis/api/LICENSE,Apache-2.0
google.golang.org/genproto/googleapis/rpc,https://github.com/googleapis/go-genproto/blob/e917dd12ba7a/googleapis/rpc/LICENSE,Apache-2.0
google.golang.org/api,https://github.com/googleapis/google-api-go-client/blob/v0.150.0/LICENSE,BSD-3-Clause
google.golang.org/api/internal/third_party/uritemplates,https://github.com/googleapis/google-api-go-client/blob/v0.150.0/internal/third_party/uritemplates/LICENSE,BSD-3-Clause
google.golang.org/genproto/googleapis,https://github.com/googleapis/go-genproto/blob/49dd2c1f3d0b/LICENSE,Apache-2.0
google.golang.org/genproto/googleapis/api,https://github.com/googleapis/go-genproto/blob/49dd2c1f3d0b/googleapis/api/LICENSE,Apache-2.0
google.golang.org/genproto/googleapis/rpc,https://github.com/googleapis/go-genproto/blob/d783a09b4405/googleapis/rpc/LICENSE,Apache-2.0
google.golang.org/grpc,https://github.com/grpc/grpc-go/blob/v1.59.0/LICENSE,Apache-2.0
google.golang.org/protobuf,https://github.com/protocolbuffers/protobuf-go/blob/v1.31.0/LICENSE,BSD-3-Clause
gopkg.in/inf.v0,https://github.com/go-inf/inf/blob/v0.9.1/LICENSE,BSD-3-Clause
Expand Down

0 comments on commit 93cbf28

Please sign in to comment.