diff options
Diffstat (limited to '.github/workflows/e2e.yaml')
-rw-r--r-- | .github/workflows/e2e.yaml | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml new file mode 100644 index 0000000..0991bf7 --- /dev/null +++ b/.github/workflows/e2e.yaml @@ -0,0 +1,94 @@ +name: Basic e2e test + +on: + pull_request: + branches: ['main'] + +jobs: + e2e: + strategy: + fail-fast: false + matrix: + platform: + - ubuntu-latest + - windows-latest + name: e2e ${{ matrix.platform }} + runs-on: ${{ matrix.platform }} + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + go-version: 1.19 + check-latest: true + + - name: crane append to an image, set the entrypoint, run it locally, roundtrip it + shell: bash + run: | + set -euxo pipefail + + # Setup local registry + go run ./cmd/registry & + + base=alpine + platform=linux/amd64 + if [[ "${{ matrix.platform }}" == "windows-latest" ]]; then + base=mcr.microsoft.com/windows/nanoserver:ltsc2022 + platform=windows/amd64 + fi + + CGO_ENABLED=0 go build -o app/crane ./cmd/crane + tar cvf crane.tar app + + # This prevents Bash for Windows from mangling path names. + # It shouldn't be necessary in general unless you're using Bash for + # Windows. + export MSYS_NO_PATHCONV=1 + + img=$(./app/crane mutate \ + --entrypoint=/app/crane,version \ + $(./app/crane append \ + --platform ${platform} \ + --base ${base} \ + --new_tag localhost:1338/append-test \ + --new_layer crane.tar)) + + # Run the image with and without args. + docker run $img + docker run $img --help + + # Make sure we can roundtrip it through pull/push + layout=$(mktemp -d) + dst=localhost:1338/roundtrip-test + + ./app/crane pull --format=oci $img $layout + ./app/crane push --image-refs=foo.images $layout $dst + diff <(./app/crane manifest $img) <(./app/crane manifest $(cat foo.images)) + + # Make sure we can roundtrip an index (distroless). + distroless=$(mktemp -d) + remote="gcr.io/distroless/static" + local="localhost:1338/distroless:static" + + ./app/crane pull --format=oci $remote $distroless + ./app/crane push $distroless $local + diff <(./app/crane manifest $remote) <(./app/crane manifest $local) + + # And that it works for a single platform (pulling from what we just pushed). + distroless=$(mktemp -d) + remote="$local" + local="localhost:1338/distroless/platform:static" + + ./app/crane pull --platform=linux/arm64 --format=oci $remote $distroless + ./app/crane push $distroless $local + diff <(./app/crane manifest --platform linux/arm64 $remote) <(./app/crane manifest $local) + + - name: crane pull image, and export it from stdin to filesystem tar to stdout + shell: bash + run: | + set -euxo pipefail + + ./app/crane pull ubuntu ubuntu.tar + ./app/crane export - - < ubuntu.tar > filesystem.tar + ls -la *.tar + |