Skip to content

Commit

Permalink
Check in CI that the test/ module doesn't use internal APIs
Browse files Browse the repository at this point in the history
An idea mentioned in-passing in microsoft#1073, this would ensure that tests can
be looked at as usage examples, which use of internal APIs prevents.

vendor/ and internal/ are excluded, the former because we only care
about direct dependencies, and the latter so that if tests are done that
depend on an unpublished API, it's possible _and_ explicit.

Signed-off-by: Paul "TBBle" Hampson <[email protected]>
  • Loading branch information
TBBle committed Sep 24, 2021
1 parent 1f8211a commit 6fe9ad7
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
21 changes: 21 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,27 @@ 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." + "`r`n" + $failures)
}
exit $failures.Length
# TODO: Remove this once this test succeeds.
continue-on-error: true

test:
runs-on: 'windows-2019'
steps:
Expand Down
7 changes: 7 additions & 0 deletions test/scripts/Verify-NoInternalImports.ps1
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 6fe9ad7

Please sign in to comment.