diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c08533b447..ecdaa37f8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,12 +9,12 @@ env: jobs: lint: - runs-on: 'windows-2019' + runs-on: "windows-2019" steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '^1.15.0' + go-version: "^1.15.0" - name: golangci-lint uses: golangci/golangci-lint-action@v2 @@ -23,14 +23,14 @@ jobs: args: --timeout=5m -v verify-main-vendor: - runs-on: 'windows-2019' + runs-on: "windows-2019" env: GOPROXY: "https://proxy.golang.org,direct" steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '^1.15.0' + go-version: "^1.15.0" - name: Validate main modules shell: powershell run: | @@ -40,16 +40,16 @@ jobs: Write-Error "Main modules are not up to date. Please validate your go version >= this job's and run `go mod vendor` followed by `go mod tidy` in the repo root path." } exit $process.ExitCode - + verify-test-vendor: - runs-on: 'windows-2019' + runs-on: "windows-2019" env: GOPROXY: "https://proxy.golang.org,direct" steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '^1.15.0' + go-version: "^1.15.0" - name: Validate test modules shell: powershell run: | @@ -60,13 +60,33 @@ jobs: } exit $process.ExitCode + verify-test-doesnt-use-internal-apis: + runs-on: "windows-2019" + env: + GOPROXY: "https://proxy.golang.org,direct" + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: "^1.15.0" + - name: Validate test module doesn't use internal APIs + shell: powershell + run: | + $currentPath = (Get-Location).Path + $failures = & ${currentPath}/test/scripts/Verify-NoInternalImports.ps1 "${currentPath}/test" + if ($failures.Length -gt 0) { + Write-Error "Test module should not depend on github.com/Microsoft/hcsshim/internal/... to function." + Write-Warning $failures + } + exit $failures.Length + test: - runs-on: 'windows-2019' + runs-on: "windows-2019" steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '^1.15.0' + go-version: "^1.15.0" - run: go test -gcflags=all=-d=checkptr -v ./... -tags admin - run: go test -gcflags=all=-d=checkptr -v ./internal -tags admin @@ -93,12 +113,12 @@ jobs: test/sample-logging-driver.exe build: - runs-on: 'windows-2019' + runs-on: "windows-2019" steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '^1.15.0' + go-version: "^1.15.0" - run: go build ./cmd/containerd-shim-runhcs-v1 - run: go build ./cmd/runhcs @@ -135,7 +155,7 @@ jobs: - name: Install go uses: actions/setup-go@v2 with: - go-version: '^1.15.0' + go-version: "^1.15.0" - name: Pull busybox image run: docker pull busybox diff --git a/test/scripts/Verify-NoInternalImports.ps1 b/test/scripts/Verify-NoInternalImports.ps1 new file mode 100644 index 0000000000..0f3005dd01 --- /dev/null +++ b/test/scripts/Verify-NoInternalImports.ps1 @@ -0,0 +1,7 @@ +$FOUND = 0 +Get-ChildItem -Path $args[0] -Recurse -Include '*.go' | Where-Object { $_.Directory -NotMatch 'vendor|internal' } | ForEach-Object { + $LISTDATA = (go list -tags functional -json $_.FullName | ConvertFrom-Json) + $INTERNALS = $LISTDATA.Imports.Where({ $_.StartsWith("github.com/Microsoft/hcsshim/internal") }) + $LISTDATA.TestImports.Where({ $_.StartsWith("github.com/Microsoft/hcsshim/internal") }) + if ($INTERNALS.Length -gt 0) { Write-Output "$_ contains one or more imports from github.com/Microsoft/hcsshim/internal/..."; $FOUND += 1 } +} +exit $FOUND