# This is a conformance test workflow that is automatically triggered with each PR

name: conformance

# Controls when the action will run. Workflow runs when manually triggered using the UI
# or API.
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

permissions: read-all

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  run:
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    - name: Install go 1.23
      uses: actions/setup-go@v6
      with:
        cache: false
        go-version: 1.25.x
    - name: Checkout this PR
      uses: actions/checkout@v6
    - name: Start zot server
      run: |
          cd $GITHUB_WORKSPACE
          make binary
          RUNNER_TRACKING_ID="" && ./bin/zot-linux-amd64 serve examples/config-conformance.json &
          IP=`hostname -I | awk '{print $1}'`
          echo "SERVER_URL=http://${IP}:8080" >> $GITHUB_ENV
    - uses: actions/checkout@v6
      with:
        repository: opencontainers/distribution-spec
        ref: main
        path: distribution-spec
    - name: build conformance binary from main
      run: |
        (cd distribution-spec/ && make conformance-binary)
        mv distribution-spec/output/conformance.test .
        rm -rf distribution-spec/
    - name: run conformance
      env:
        OCI_ROOT_URL: ${{ env.SERVER_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_REFERRERS: 1
        OCI_CROSSMOUNT_NAMESPACE: oci-conformance/crossmount-test
      run: |
        ./conformance.test
    - run: mkdir -p .out/ && mv {report.html,junit.xml} .out/
      if: always()
    - name: Upload test results zip as build artifact
      uses: actions/upload-artifact@v6
      with:
        name: oci-test-results-${{ github.sha }}
        path: .out/
      if: github.event_name == 'push'
