name: conformance

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  pull_request:
  push:

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  run-conformance-test:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      -
        name: Build image
        uses: docker/bake-action@v4
        with:
          targets: image-local
      -
        name: Start distribution server
        run: |
          IP=`hostname -I | awk '{print $1}'`
          echo "IP=$IP" >> $GITHUB_ENV
          echo "OCI_ROOT_URL=http://$IP:5000" >> $GITHUB_ENV
          DISTRIBUTION_REF="registry:local"
          docker run --rm -p 5000:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true -idt "registry:local"
      -
        name: Run OCI Distribution Spec conformance tests
        uses: opencontainers/distribution-spec@v1.0.1
        env:
          OCI_ROOT_URL: ${{ env.OCI_ROOT_URL }}
          OCI_NAMESPACE: oci-conformance/distribution-test
          OCI_TEST_PULL: 1
          OCI_TEST_PUSH: 1
          OCI_TEST_CONTENT_DISCOVERY: 1
          OCI_TEST_CONTENT_MANAGEMENT: 1
          OCI_HIDE_SKIPPED_WORKFLOWS: 1
      -
        name: Move test results
        run: mkdir -p .out/ && mv {report.html,junit.xml} .out/
      -
        name: Upload test results
        uses: actions/upload-artifact@v4.3.0
        with:
          name: oci-test-results-${{ github.sha }}
          path: .out/
          if-no-files-found: error
