feat: Add py and go hole-punch (DCUtR) NAT interop #79
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Hole Punch Interoperability Tests (PR) | |
| on: | |
| pull_request: | |
| paths: | |
| - 'hole-punch/**' | |
| - '.github/actions/detect-changed-impls/**' | |
| - '.github/actions/run-bash-hole-punch-test/**' | |
| - '.github/workflows/hole-punch-interop-pr.yml' | |
| workflow_dispatch: | |
| inputs: | |
| test-select: | |
| description: 'Select specific tests (pipe-separated substrings)' | |
| required: false | |
| default: '' | |
| type: string | |
| test-ignore: | |
| description: 'Ignore specific tests (pipe-separated substrings)' | |
| required: false | |
| default: '~failing' | |
| type: string | |
| relay-select: | |
| description: 'Select specific relays (pipe-separated substrings)' | |
| required: false | |
| default: '' | |
| type: string | |
| relay-ignore: | |
| description: 'Ignore specific relays (pipe-separated substrings)' | |
| required: false | |
| default: '~failing' | |
| type: string | |
| router-select: | |
| description: 'Select specific routers (pipe-separated substrings)' | |
| required: false | |
| default: '' | |
| type: string | |
| router-ignore: | |
| description: 'Ignore specific routers (pipe-separated substrings)' | |
| required: false | |
| default: '' | |
| type: string | |
| transport-ignore: | |
| description: 'Ignore transports (pipe-separated patterns, e.g., "ws|webrtc-direct")' | |
| required: false | |
| default: 'ws|webrtc-direct' | |
| type: string | |
| force-matrix-rebuild: | |
| description: 'Force test matrix regeneration (bypass cache)' | |
| required: false | |
| default: false | |
| type: boolean | |
| force-image-rebuild: | |
| description: 'Force Docker image rebuilds (bypass cache)' | |
| required: false | |
| default: false | |
| type: boolean | |
| debug: | |
| description: 'Enable debug mode (sets DEBUG=true in test containers)' | |
| required: false | |
| default: false | |
| type: boolean | |
| snapshot: | |
| description: 'Create and upload test snapshot for debugging' | |
| required: false | |
| default: true | |
| type: boolean | |
| export-docker-images: | |
| description: 'Export Docker images in snapshot (slow, usually not needed for PRs)' | |
| required: false | |
| default: false | |
| type: boolean | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| resolve-parameters: | |
| runs-on: [self-hosted, linux, x64, ephemeral] | |
| outputs: | |
| test-select: ${{ steps.resolve.outputs.test-select }} | |
| test-ignore: ${{ steps.resolve.outputs.test-ignore }} | |
| relay-select: ${{ steps.resolve.outputs.relay-select }} | |
| relay-ignore: ${{ steps.resolve.outputs.relay-ignore }} | |
| router-select: ${{ steps.resolve.outputs.router-select }} | |
| router-ignore: ${{ steps.resolve.outputs.router-ignore }} | |
| transport-ignore: ${{ steps.resolve.outputs.transport-ignore }} | |
| force-matrix-rebuild: ${{ steps.resolve.outputs.force-matrix-rebuild }} | |
| force-image-rebuild: ${{ steps.resolve.outputs.force-image-rebuild }} | |
| debug: ${{ steps.resolve.outputs.debug }} | |
| snapshot: ${{ steps.resolve.outputs.snapshot }} | |
| export-docker-images: ${{ steps.resolve.outputs.export-docker-images }} | |
| should-run-tests: ${{ steps.resolve.outputs.should-run-tests }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Detect changed implementations/relays/routers | |
| if: github.event_name != 'workflow_dispatch' | |
| id: detect | |
| uses: ./.github/actions/detect-changed-impls | |
| with: | |
| test-type: hole-punch | |
| - name: Resolve parameters | |
| id: resolve | |
| shell: bash | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | |
| # Manual trigger - use workflow inputs | |
| echo "test-select=${{ github.event.inputs.test-select }}" >> $GITHUB_OUTPUT | |
| echo "test-ignore=${{ github.event.inputs.test-ignore }}" >> $GITHUB_OUTPUT | |
| echo "relay-select=${{ github.event.inputs.relay-select }}" >> $GITHUB_OUTPUT | |
| echo "relay-ignore=${{ github.event.inputs.relay-ignore }}" >> $GITHUB_OUTPUT | |
| echo "router-select=${{ github.event.inputs.router-select }}" >> $GITHUB_OUTPUT | |
| echo "router-ignore=${{ github.event.inputs.router-ignore }}" >> $GITHUB_OUTPUT | |
| echo "transport-ignore=${{ github.event.inputs.transport-ignore }}" >> $GITHUB_OUTPUT | |
| echo "force-matrix-rebuild=${{ github.event.inputs.force-matrix-rebuild }}" >> $GITHUB_OUTPUT | |
| echo "force-image-rebuild=${{ github.event.inputs.force-image-rebuild }}" >> $GITHUB_OUTPUT | |
| echo "debug=${{ github.event.inputs.debug }}" >> $GITHUB_OUTPUT | |
| echo "snapshot=${{ github.event.inputs.snapshot }}" >> $GITHUB_OUTPUT | |
| echo "export-docker-images=${{ github.event.inputs.export-docker-images }}" >> $GITHUB_OUTPUT | |
| echo "should-run-tests=true" >> $GITHUB_OUTPUT | |
| echo "→ Manual trigger: using workflow inputs" | |
| else | |
| # Automatic trigger: always run the FULL matrix. Change-scoped | |
| # selects are unsound for interop (a new peer must be tested | |
| # against every existing relay/router/peer, not just changed | |
| # ones), so select everything except known-broken. | |
| echo "test-select=" >> $GITHUB_OUTPUT | |
| # Always include ~failing to skip known-broken tests. | |
| echo "test-ignore=~failing" >> $GITHUB_OUTPUT | |
| echo "relay-select=" >> $GITHUB_OUTPUT | |
| echo "relay-ignore=~failing" >> $GITHUB_OUTPUT | |
| echo "router-select=" >> $GITHUB_OUTPUT | |
| echo "router-ignore=~failing" >> $GITHUB_OUTPUT | |
| echo "transport-ignore=ws|webrtc-direct" >> $GITHUB_OUTPUT | |
| echo "force-matrix-rebuild=${{ steps.detect.outputs.impls-yaml-changed }}" >> $GITHUB_OUTPUT | |
| echo "force-image-rebuild=${{ steps.detect.outputs.images-folder-changed }}" >> $GITHUB_OUTPUT | |
| echo "debug=false" >> $GITHUB_OUTPUT | |
| echo "snapshot=true" >> $GITHUB_OUTPUT | |
| echo "export-docker-images=false" >> $GITHUB_OUTPUT | |
| echo "should-run-tests=${{ steps.detect.outputs.has-changes }}" >> $GITHUB_OUTPUT | |
| echo "→ Automatic trigger: using change detection outputs" | |
| fi | |
| run-tests: | |
| needs: resolve-parameters | |
| if: needs.resolve-parameters.outputs.should-run-tests == 'true' | |
| runs-on: [self-hosted, linux, x64, ephemeral] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Run hole punch interop tests | |
| uses: ./.github/actions/run-bash-hole-punch-test | |
| with: | |
| test-select: '${{ needs.resolve-parameters.outputs.test-select }}' | |
| test-ignore: '${{ needs.resolve-parameters.outputs.test-ignore }}' | |
| relay-select: '${{ needs.resolve-parameters.outputs.relay-select }}' | |
| relay-ignore: '${{ needs.resolve-parameters.outputs.relay-ignore }}' | |
| router-select: '${{ needs.resolve-parameters.outputs.router-select }}' | |
| router-ignore: '${{ needs.resolve-parameters.outputs.router-ignore }}' | |
| transport-ignore: '${{ needs.resolve-parameters.outputs.transport-ignore }}' | |
| cache-dir: /srv/cache | |
| snapshot: ${{ needs.resolve-parameters.outputs.snapshot }} | |
| export-docker-images: ${{ needs.resolve-parameters.outputs.export-docker-images }} | |
| force-matrix-rebuild: ${{ needs.resolve-parameters.outputs.force-matrix-rebuild }} | |
| force-image-rebuild: ${{ needs.resolve-parameters.outputs.force-image-rebuild }} | |
| debug: ${{ needs.resolve-parameters.outputs.debug }} |