← Files Marketing CouncilARCHIVED FILE

.github/workflows/plugin-ci.yml

4.98 KB · Oct 2, 2026 · 00:31 UTC

↓ Download file

name: Plugin CI

on:
  push:
    branches:
      - main
      - fix/chatgpt-plugin-discovery-routing
      - feat/omni-marketing-skill-packs
  pull_request:
    branches:
      - main

permissions:
  contents: read

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Discovery version consistency
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_release_version_is_consistent_across_public_manifests -v

      - name: Discovery route registry coverage
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_dynamic_router_exists_and_covers_every_focused_skill -v

      - name: Discovery main router contract
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_main_skill_declares_dynamic_router_and_safe_fallback -v

      - name: Discovery metadata files
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_all_skills_have_openai_metadata_files -v

      - name: Discovery implicit invocation policy
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_all_skills_allow_implicit_invocation -v

      - name: Discovery explicit default prompts
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_all_skills_have_explicit_default_prompts -v

      - name: Discovery renderable labels
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_all_skills_have_renderable_interface_labels -v

      - name: Discovery discriminative skill descriptions
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_skill_descriptions_are_discriminative_enough_for_implicit_routing -v

      - name: Discovery public skill-count consistency
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_public_surfaces_report_29_total_and_28_focused_skills -v

      - name: Discovery CI release coverage
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_plugin_ci_runs_for_main_pushes_and_pull_requests -v

      - name: Discovery CI token hardening
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_plugin_ci_uses_read_only_token_without_persisted_credentials -v

      - name: Discovery adapter release consistency
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_adapter_docs_reference_current_release_and_skill_inventory -v

      - name: Discovery release preflight safety
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_release_preflight_validates_exact_current_archive_in_fresh_directory -v

      - name: Discovery release snapshot runbook
        run: python -m unittest tests.test_plugin_discovery.PluginDiscoveryTests.test_release_notes_include_resubmission_requirement_for_snapshot_skills -v

      - name: Skill router regression tests
        run: python -m unittest tests.test_skill_router -v

      - name: Dynamic DAG router tests
        run: python -m unittest tests.test_dynamic_router -v

      - name: Omni full-pack contract tests
        run: python -m unittest tests.test_omni_skill_packs -v

      - name: Validate submission draft
        run: python scripts/validate_submission_pack.py submission/submission-pack.json --json

      - name: Validate documentation lifecycle
        run: python scripts/validate_documentation.py --json

      - name: Run full unit test suite
        run: python -m unittest discover -s tests -v

      - name: Validate source distribution
        run: python scripts/validate_distribution.py . --json

      - name: Build host packages
        run: python scripts/build_host_packages.py --output-root /tmp/marketing-council-dist

      - name: Build OpenAI submission skill bundles
        run: python scripts/build_openai_submission_pack.py --output-root /tmp/marketing-council-submission --json

      - name: Validate OpenAI plugin package
        run: |
          rm -rf /tmp/marketing-council-openai
          mkdir -p /tmp/marketing-council-openai
          python - <<'PY'
          import json, pathlib, zipfile
          repo = pathlib.Path('.').resolve()
          version = json.loads((repo / '.codex-plugin' / 'plugin.json').read_text(encoding='utf-8'))['version']
          archive = pathlib.Path('/tmp/marketing-council-dist') / f'marketing-council-openai-plugin-v{version}.zip'
          if not archive.is_file():
              raise SystemExit(f'missing current release archive: {archive}')
          out = pathlib.Path('/tmp/marketing-council-openai')
          with zipfile.ZipFile(archive) as zf:
              zf.extractall(out)
          print(archive)
          PY
          python scripts/validate_openai_plugin.py /tmp/marketing-council-openai --json

SHA-256: 58fac5d45a9bc31ef17c6010e0a46d48f7169d6dea754c1483dd8b57c3b8390c