Skip to content

Add Codex plugin release tooling and workflow - #259

Closed
keertip wants to merge 4 commits into
flutter:mainfrom
keertip:codex-workflow
Closed

keertip wants to merge 4 commits into
flutter:mainfrom
keertip:codex-workflow

Conversation

@keertip

@keertip keertip commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

Adds tooling to build, validate, and release the zip for the Dart and Flutter Codex plugin, which is uploaded to the OpenAI plugin submission portal. This implements the "Codex Plugin Release Packaging" design doc.

The zip is a skills-only build of the plugin.

What's included
tool/codex_release/: a new workspace package (same layout as tool/generator/).

  • bin/build.dart: builds dist/dart-flutter-codex-.zip. The release copy of the manifest:
    • removes mcpServers, plus MCP from capabilities and mcp from keywords;
    • replaces the descriptions with versions that don't mention the MCP server;
    • sets extensions.com.openai.publication.release_notes to the skills added, updated, and removed since the previous codex-plugin-v* tag.
      The zip only contains committed skill files and the images the manifest references. Entries have a fixed timestamp, so rebuilding a commit in CI produces an identical zip.
  • bin/validate.dart: checks a zip against OpenAI's documented package rules: archive limits, manifest and listing fields, excluded content, images, and skills. Each problem is reported with OpenAI's error code. Checks specific to this repo use release_ codes.
  • bin/release.dart: the maintainer's release script, which uses gh. It:
    • checks for a clean, up-to-date main;
    • stops if the version's tag already exists;
    • creates and pushes codex-plugin-v;
    • waits for the workflow and downloads the zip to dist/.
      --dry-run runs the checks, then builds and validates locally without creating a tag.

.github/workflows/release_codex_plugin.yaml

  • On codex-plugin-v* tags: builds the zip from the tagged commit, validates it, and uploads it as a workflow artifact (kept for 30 days).
  • On PRs that touch .codex-plugin/, assets/, skills/, or the tool: analyzes and tests the tool, then builds and validates the zip without uploading it.
  • If a tag run fails, a separate job opens a codex-release issue. It's the only job with permission to write issues.
  • Other changes: adds tool/codex_release to the root workspace and dist/ to .gitignore.

Releasing

git checkout main && git pull
dart run tool/codex_release/bin/release.dart --dry-run   # optional
dart run tool/codex_release/bin/release.dart

Then upload dist/dart-flutter-codex-.zip in the portal, resolve any findings, submit for review, and publish after approval. See tool/codex_release/README.md.

Testing
End-to-end run on my fork (keertip/agent-plugins) with a test version, 1.0.7-rc1, from a branch:
--dry-run passed;
the real run pushed codex-plugin-v1.0.7-rc1, the workflow built and validated the zip, and the script downloaded it;
the downloaded zip has the expected 34 files and passes validation, and its manifest has no MCP references.
A build from main passes validation, including the square logo and 30-character short description from #254.

Not covered yet
A "Releasing the Codex plugin" section for CONTRIBUTING.md will follow in a separate PR, after the first release.
Failure issues aren't assigned to anyone until release owners are named.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new codex_release tool package under tool/codex_release to automate building, validating, and releasing the Dart and Flutter Codex plugin zip. The package includes scripts for building, releasing, and validating the plugin against OpenAI's package rules, along with comprehensive unit tests. Feedback on the changes suggests improving error handling and efficiency: specifically, caching the parsed manifest in Release to avoid redundant parsing and catching potential format or file system exceptions during manifest reading to prevent unhandled crashes.

Comment thread tool/codex_release/lib/src/release.dart Resolved
Share one manifest reader between build and release that reports a
missing file, invalid JSON, or a non-object as a BuildException, and
parse the manifest once per release run.
@keertip
keertip requested a review from johnpryan November 2, 2026 19:59
@keertip
keertip marked this pull request as draft November 3, 2026 16:32
@keertip keertip closed this Nov 3, 2026
@keertip
keertip deleted the codex-workflow branch November 3, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant