Skip to content

feat(cli): migrate otdfctl into platform monorepo#3205

Open
alkalescent wants to merge 9 commits intomainfrom
DSPX-2655-migrate-otdfctl
Open

feat(cli): migrate otdfctl into platform monorepo#3205
alkalescent wants to merge 9 commits intomainfrom
DSPX-2655-migrate-otdfctl

Conversation

@alkalescent
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent commented Mar 23, 2026

Proposed Changes

  • Base PR for the otdfctl migration stack (DSPX-2654 epic)
  • Merge opentdf/otdfctl into otdfctl/ via git subtree add, preserving full git history and tags
  • Rewrite Go module path and integrate with go.work workspace

DSPX-2655: Subtree merge + cleanup

  • Subtree merge of latest otdfctl main (v0.30.0, includes namespace refactor and dependency bumps)
  • Remove files handled at platform root (.github/, .golangci.yaml, CONTRIBUTING.md, LICENSE)
  • Keep otdfctl/CHANGELOG.md for historical reference
  • Update root .gitignore, CODEOWNERS, pr-checks scope
  • Import tags as otdfctl/* prefix (e.g., otdfctl/v0.26.2)

DSPX-2656: Module path rewrite

  • Rewrite module path: github.com/opentdf/otdfctlgithub.com/opentdf/platform/otdfctl
  • Update all Go import statements (~54 files)
  • Add otdfctl to go.work workspace
  • Update Dockerfile

DSPX-2657: Makefile and build scripts

  • Update root and otdfctl Makefiles for monorepo integration
  • Restore build scripts from original otdfctl repo

DSPX-2658: CI matrix

  • Add otdfctl to checks.yaml go job matrix
  • govulncheck, golangci-lint, unit tests, go fmt/tidy checks

PR Stack (DSPX-2654)

  1. This PR (feat(cli): migrate otdfctl into platform monorepo #3205) — Subtree merge + module path rewrite (DSPX-2655, DSPX-2656)
  2. feat(cli): Makefile and build scripts #3208 — Makefile and build scripts (DSPX-2657)
  3. feat(cli): add otdfctl to platform CI matrix #3221 — CI workflows (DSPX-2658)
  4. (future) — e2e tests (DSPX-2659)

Checklist

  • I have added or updated unit tests
  • I have added or updated integration tests (if appropriate)
  • I have added or updated documentation

Testing Instructions

  • git log --oneline --follow -M otdfctl/cmd/root.go shows pre-merge history
  • git tag | grep otdfctl/v0.26 confirms tags imported
  • go build ./otdfctl/... succeeds

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 23, 2026

Important

Review skipped

Too many files!

This PR contains 298 files, which is 148 over the limit of 150.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 211b2617-c97c-4b0f-b7ae-e7dfcf21fce7

📥 Commits

Reviewing files that changed from the base of the PR and between 9010f12 and 572446e.

⛔ Files ignored due to path filters (2)
  • go.work is excluded by !**/*.work
  • otdfctl/go.sum is excluded by !**/*.sum
📒 Files selected for processing (298)
  • .github/release-please/release-please-config.main.json
  • .github/release-please/release-please-config.otdfctl.json
  • .github/release-please/release-please-manifest.json
  • .github/workflows/checks.yaml
  • .github/workflows/nightly-checks.yaml
  • .github/workflows/pr-checks.yaml
  • .github/workflows/release-otdfctl.yaml
  • .gitignore
  • .golangci.yaml
  • CODEOWNERS
  • Dockerfile
  • Makefile
  • adr/decisions/2026-03-24-otdfctl-migration.md
  • otdfctl/CHANGELOG.md
  • otdfctl/Makefile
  • otdfctl/README.md
  • otdfctl/adr/0000-use-adr-dir-for-adr.md
  • otdfctl/adr/0001-printing-with-json.md
  • otdfctl/cmd/auth/auth.go
  • otdfctl/cmd/auth/clearCachedCredentials.go
  • otdfctl/cmd/auth/clientCredentials.go
  • otdfctl/cmd/auth/login.go
  • otdfctl/cmd/auth/logout.go
  • otdfctl/cmd/auth/printAccessToken.go
  • otdfctl/cmd/common/common.go
  • otdfctl/cmd/config/config.go
  • otdfctl/cmd/dev/dev.go
  • otdfctl/cmd/dev/selectors.go
  • otdfctl/cmd/execute.go
  • otdfctl/cmd/execute_test.go
  • otdfctl/cmd/interactive.go
  • otdfctl/cmd/migrate/migrate.go
  • otdfctl/cmd/migrate/namespacedPolicy.go
  • otdfctl/cmd/migrate/prune/namespacedPolicy.go
  • otdfctl/cmd/migrate/prune/prune.go
  • otdfctl/cmd/migrate/registeredResources.go
  • otdfctl/cmd/policy/actions.go
  • otdfctl/cmd/policy/attributeValues.go
  • otdfctl/cmd/policy/attributes.go
  • otdfctl/cmd/policy/baseKeys.go
  • otdfctl/cmd/policy/kasGrants.go
  • otdfctl/cmd/policy/kasKeys.go
  • otdfctl/cmd/policy/kasRegistry.go
  • otdfctl/cmd/policy/keyManagement.go
  • otdfctl/cmd/policy/keyManagementProvider.go
  • otdfctl/cmd/policy/namespaces.go
  • otdfctl/cmd/policy/obligations.go
  • otdfctl/cmd/policy/policy.go
  • otdfctl/cmd/policy/registeredResources.go
  • otdfctl/cmd/policy/resourceMappingGroups.go
  • otdfctl/cmd/policy/resourceMappings.go
  • otdfctl/cmd/policy/subjectConditionSets.go
  • otdfctl/cmd/policy/subjectMappings.go
  • otdfctl/cmd/profile.go
  • otdfctl/cmd/root.go
  • otdfctl/cmd/tdf/decrypt.go
  • otdfctl/cmd/tdf/encrypt.go
  • otdfctl/cmd/tdf/inspect.go
  • otdfctl/cmd/tdf/tdf.go
  • otdfctl/docs/README.md
  • otdfctl/docs/main.go
  • otdfctl/docs/man/_index.md
  • otdfctl/docs/man/auth/_index.md
  • otdfctl/docs/man/auth/clear-client-credentials.md
  • otdfctl/docs/man/auth/client-credentials.md
  • otdfctl/docs/man/auth/login.md
  • otdfctl/docs/man/auth/logout.md
  • otdfctl/docs/man/auth/print-access-token.md
  • otdfctl/docs/man/config/_index.md
  • otdfctl/docs/man/config/output.md
  • otdfctl/docs/man/decrypt/_index.md
  • otdfctl/docs/man/dev/_index.md
  • otdfctl/docs/man/dev/design-system.md
  • otdfctl/docs/man/dev/selectors/_index.md
  • otdfctl/docs/man/dev/selectors/generate.md
  • otdfctl/docs/man/dev/selectors/test.md
  • otdfctl/docs/man/encrypt/_index.md
  • otdfctl/docs/man/example.xmd
  • otdfctl/docs/man/inspect/_index.md
  • otdfctl/docs/man/interactive.md
  • otdfctl/docs/man/migrate/_index.md
  • otdfctl/docs/man/migrate/namespaced-policy.md
  • otdfctl/docs/man/migrate/prune/_index.md
  • otdfctl/docs/man/migrate/prune/namespaced-policy.md
  • otdfctl/docs/man/policy/_index.md
  • otdfctl/docs/man/policy/actions/_index.md
  • otdfctl/docs/man/policy/actions/create.md
  • otdfctl/docs/man/policy/actions/delete.md
  • otdfctl/docs/man/policy/actions/get.md
  • otdfctl/docs/man/policy/actions/list.md
  • otdfctl/docs/man/policy/actions/update.md
  • otdfctl/docs/man/policy/attributes/_index.md
  • otdfctl/docs/man/policy/attributes/create.md
  • otdfctl/docs/man/policy/attributes/deactivate.md
  • otdfctl/docs/man/policy/attributes/get.md
  • otdfctl/docs/man/policy/attributes/key/_index.md
  • otdfctl/docs/man/policy/attributes/key/assign.md
  • otdfctl/docs/man/policy/attributes/key/remove.md
  • otdfctl/docs/man/policy/attributes/list.md
  • otdfctl/docs/man/policy/attributes/unsafe/_index.md
  • otdfctl/docs/man/policy/attributes/unsafe/delete.md
  • otdfctl/docs/man/policy/attributes/unsafe/reactivate.md
  • otdfctl/docs/man/policy/attributes/unsafe/update.md
  • otdfctl/docs/man/policy/attributes/update.md
  • otdfctl/docs/man/policy/attributes/values/_index.md
  • otdfctl/docs/man/policy/attributes/values/create.md
  • otdfctl/docs/man/policy/attributes/values/deactivate.md
  • otdfctl/docs/man/policy/attributes/values/get.md
  • otdfctl/docs/man/policy/attributes/values/key/_index.md
  • otdfctl/docs/man/policy/attributes/values/key/assign.md
  • otdfctl/docs/man/policy/attributes/values/key/remove.md
  • otdfctl/docs/man/policy/attributes/values/list.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/_index.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/delete.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/reactivate.md
  • otdfctl/docs/man/policy/attributes/values/unsafe/update.md
  • otdfctl/docs/man/policy/attributes/values/update.md
  • otdfctl/docs/man/policy/kas-grants/_index.md
  • otdfctl/docs/man/policy/kas-grants/assign.md
  • otdfctl/docs/man/policy/kas-grants/list.md
  • otdfctl/docs/man/policy/kas-grants/unassign.md
  • otdfctl/docs/man/policy/kas-registry/_index.md
  • otdfctl/docs/man/policy/kas-registry/create.md
  • otdfctl/docs/man/policy/kas-registry/delete.md
  • otdfctl/docs/man/policy/kas-registry/get.md
  • otdfctl/docs/man/policy/kas-registry/key/_index.md
  • otdfctl/docs/man/policy/kas-registry/key/base/_index.md
  • otdfctl/docs/man/policy/kas-registry/key/base/get.md
  • otdfctl/docs/man/policy/kas-registry/key/base/set.md
  • otdfctl/docs/man/policy/kas-registry/key/create.md
  • otdfctl/docs/man/policy/kas-registry/key/get.md
  • otdfctl/docs/man/policy/kas-registry/key/import.md
  • otdfctl/docs/man/policy/kas-registry/key/list-mappings.md
  • otdfctl/docs/man/policy/kas-registry/key/list.md
  • otdfctl/docs/man/policy/kas-registry/key/rotate.md
  • otdfctl/docs/man/policy/kas-registry/key/unsafe/_index.md
  • otdfctl/docs/man/policy/kas-registry/key/unsafe/delete.md
  • otdfctl/docs/man/policy/kas-registry/key/update.md
  • otdfctl/docs/man/policy/kas-registry/list.md
  • otdfctl/docs/man/policy/kas-registry/update.md
  • otdfctl/docs/man/policy/key-management/_index.md
  • otdfctl/docs/man/policy/key-management/provider/_index.md
  • otdfctl/docs/man/policy/key-management/provider/create.md
  • otdfctl/docs/man/policy/key-management/provider/delete.md
  • otdfctl/docs/man/policy/key-management/provider/get.md
  • otdfctl/docs/man/policy/key-management/provider/list.md
  • otdfctl/docs/man/policy/key-management/provider/update.md
  • otdfctl/docs/man/policy/namespaces/_index.md
  • otdfctl/docs/man/policy/namespaces/create.md
  • otdfctl/docs/man/policy/namespaces/deactivate.md
  • otdfctl/docs/man/policy/namespaces/get.md
  • otdfctl/docs/man/policy/namespaces/key/_index.md
  • otdfctl/docs/man/policy/namespaces/key/assign.md
  • otdfctl/docs/man/policy/namespaces/key/remove.md
  • otdfctl/docs/man/policy/namespaces/list.md
  • otdfctl/docs/man/policy/namespaces/unsafe/_index.md
  • otdfctl/docs/man/policy/namespaces/unsafe/delete.md
  • otdfctl/docs/man/policy/namespaces/unsafe/reactivate.md
  • otdfctl/docs/man/policy/namespaces/unsafe/update.md
  • otdfctl/docs/man/policy/namespaces/update.md
  • otdfctl/docs/man/policy/obligations/_index.md
  • otdfctl/docs/man/policy/obligations/create.md
  • otdfctl/docs/man/policy/obligations/delete.md
  • otdfctl/docs/man/policy/obligations/get.md
  • otdfctl/docs/man/policy/obligations/list.md
  • otdfctl/docs/man/policy/obligations/triggers/_index.md
  • otdfctl/docs/man/policy/obligations/triggers/create.md
  • otdfctl/docs/man/policy/obligations/triggers/delete.md
  • otdfctl/docs/man/policy/obligations/triggers/list.md
  • otdfctl/docs/man/policy/obligations/update.md
  • otdfctl/docs/man/policy/obligations/values/_index.md
  • otdfctl/docs/man/policy/obligations/values/create.md
  • otdfctl/docs/man/policy/obligations/values/delete.md
  • otdfctl/docs/man/policy/obligations/values/get.md
  • otdfctl/docs/man/policy/obligations/values/update.md
  • otdfctl/docs/man/policy/registered-resources/_index.md
  • otdfctl/docs/man/policy/registered-resources/create.md
  • otdfctl/docs/man/policy/registered-resources/delete.md
  • otdfctl/docs/man/policy/registered-resources/get.md
  • otdfctl/docs/man/policy/registered-resources/list.md
  • otdfctl/docs/man/policy/registered-resources/update.md
  • otdfctl/docs/man/policy/registered-resources/values/_index.md
  • otdfctl/docs/man/policy/registered-resources/values/create.md
  • otdfctl/docs/man/policy/registered-resources/values/delete.md
  • otdfctl/docs/man/policy/registered-resources/values/get.md
  • otdfctl/docs/man/policy/registered-resources/values/list.md
  • otdfctl/docs/man/policy/registered-resources/values/update.md
  • otdfctl/docs/man/policy/resource-mapping-groups/_index.md
  • otdfctl/docs/man/policy/resource-mapping-groups/create.md
  • otdfctl/docs/man/policy/resource-mapping-groups/delete.md
  • otdfctl/docs/man/policy/resource-mapping-groups/get.md
  • otdfctl/docs/man/policy/resource-mapping-groups/list.md
  • otdfctl/docs/man/policy/resource-mapping-groups/update.md
  • otdfctl/docs/man/policy/resource-mappings/_index.md
  • otdfctl/docs/man/policy/resource-mappings/create.md
  • otdfctl/docs/man/policy/resource-mappings/delete.md
  • otdfctl/docs/man/policy/resource-mappings/get.md
  • otdfctl/docs/man/policy/resource-mappings/list.md
  • otdfctl/docs/man/policy/resource-mappings/update.md
  • otdfctl/docs/man/policy/subject-condition-sets/_index.md
  • otdfctl/docs/man/policy/subject-condition-sets/create.md
  • otdfctl/docs/man/policy/subject-condition-sets/delete.md
  • otdfctl/docs/man/policy/subject-condition-sets/get.md
  • otdfctl/docs/man/policy/subject-condition-sets/list.md
  • otdfctl/docs/man/policy/subject-condition-sets/prune.md
  • otdfctl/docs/man/policy/subject-condition-sets/update.md
  • otdfctl/docs/man/policy/subject-mappings/_index.md
  • otdfctl/docs/man/policy/subject-mappings/create.md
  • otdfctl/docs/man/policy/subject-mappings/delete.md
  • otdfctl/docs/man/policy/subject-mappings/get.md
  • otdfctl/docs/man/policy/subject-mappings/list.md
  • otdfctl/docs/man/policy/subject-mappings/match.md
  • otdfctl/docs/man/policy/subject-mappings/update.md
  • otdfctl/e2e/action.yaml
  • otdfctl/e2e/actions.bats
  • otdfctl/e2e/attributes.bats
  • otdfctl/e2e/auth.bats
  • otdfctl/e2e/encrypt-decrypt.bats
  • otdfctl/e2e/kas-grants.bats
  • otdfctl/e2e/kas-keys-mappings.bats
  • otdfctl/e2e/kas-keys.bats
  • otdfctl/e2e/kas-registry.bats
  • otdfctl/e2e/key-base.bats
  • otdfctl/e2e/logging.bats
  • otdfctl/e2e/namespaces.bats
  • otdfctl/e2e/obligations.bats
  • otdfctl/e2e/otdfctl-utils.sh
  • otdfctl/e2e/profile.bats
  • otdfctl/e2e/provider-config.bats
  • otdfctl/e2e/registered-resources.bats
  • otdfctl/e2e/resize_terminal.sh
  • otdfctl/e2e/resource-mapping-groups.bats
  • otdfctl/e2e/resource-mapping.bats
  • otdfctl/e2e/setup_suite.bash
  • otdfctl/e2e/subject-condition-sets.bats
  • otdfctl/e2e/subject-mapping.bats
  • otdfctl/e2e/teardown_suite.bash
  • otdfctl/e2e/testrail-integration/samples-for-virtru-instance/testname-to-testrail-id.virtru.json
  • otdfctl/e2e/testrail-integration/samples-for-virtru-instance/testrail-virtru.config.json
  • otdfctl/e2e/testrail-integration/testname-to-testrail-id.example.json
  • otdfctl/e2e/testrail-integration/testrail.config.example.json
  • otdfctl/e2e/testrail-integration/upload-bats-test-results-to-testrail.sh
  • otdfctl/go.mod
  • otdfctl/main.go
  • otdfctl/migrations/artifact/artifact.go
  • otdfctl/migrations/artifact/artifact_test.go
  • otdfctl/migrations/artifact/metadata/metadata.go
  • otdfctl/migrations/artifact/v1/schema.go
  • otdfctl/migrations/artifact/v1/schema_test.go
  • otdfctl/migrations/registered-resources.go
  • otdfctl/migrations/registered-resources_test.go
  • otdfctl/migrations/styles.go
  • otdfctl/pkg/auth/auth.go
  • otdfctl/pkg/auth/errors.go
  • otdfctl/pkg/cli/cli.go
  • otdfctl/pkg/cli/clioptions.go
  • otdfctl/pkg/cli/confirm.go
  • otdfctl/pkg/cli/errors.go
  • otdfctl/pkg/cli/flagValues.go
  • otdfctl/pkg/cli/messages.go
  • otdfctl/pkg/cli/pipe.go
  • otdfctl/pkg/cli/printer.go
  • otdfctl/pkg/cli/sdkHelpers.go
  • otdfctl/pkg/cli/style.go
  • otdfctl/pkg/cli/table.go
  • otdfctl/pkg/cli/tabular.go
  • otdfctl/pkg/cli/utils.go
  • otdfctl/pkg/config/config.go
  • otdfctl/pkg/handlers/actions.go
  • otdfctl/pkg/handlers/attribute.go
  • otdfctl/pkg/handlers/attributeValues.go
  • otdfctl/pkg/handlers/base-keys.go
  • otdfctl/pkg/handlers/kas-grants.go
  • otdfctl/pkg/handlers/kas-keys.go
  • otdfctl/pkg/handlers/kas-registry.go
  • otdfctl/pkg/handlers/namespaces.go
  • otdfctl/pkg/handlers/obligations.go
  • otdfctl/pkg/handlers/provider-config.go
  • otdfctl/pkg/handlers/registeredResources.go
  • otdfctl/pkg/handlers/resourceMappingGroups.go
  • otdfctl/pkg/handlers/resourceMappings.go
  • otdfctl/pkg/handlers/sdk.go
  • otdfctl/pkg/handlers/selectors.go
  • otdfctl/pkg/handlers/subjectConditionSets.go
  • otdfctl/pkg/handlers/subjectmappings.go
  • otdfctl/pkg/handlers/tdf.go
  • otdfctl/pkg/man/docflags.go
  • otdfctl/pkg/man/man.go
  • otdfctl/pkg/man/style.go
  • otdfctl/pkg/profiles/errors.go
  • otdfctl/pkg/profiles/profile.go
  • otdfctl/pkg/profiles/profileAuthCreds.go
  • otdfctl/pkg/profiles/profileConfig.go
  • otdfctl/pkg/tdf/tdf.go
  • otdfctl/pkg/utils/http.go
  • otdfctl/pkg/utils/identifier.go
  • otdfctl/pkg/utils/identifier_test.go
  • otdfctl/pkg/utils/pemvalidate.go

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch DSPX-2655-migrate-otdfctl

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added the comp:ci Github Actions Work label Mar 23, 2026
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on preparing the repository for the migration of the otdfctl CLI tool. It involves copying files, updating configurations, and adjusting code ownership to ensure a smooth transition and proper maintenance of the CLI within the new repository structure.

Highlights

  • File Copying: This PR copies necessary files from the otdfctl directory to prepare for repository migration.
  • Configuration Updates: The PR updates configuration files to align with the new file locations and project structure.
  • Ignoring Artifacts: The .gitignore file is updated to ignore otdfctl specific files and directories, such as binaries, test artifacts, and Hugo-related files.
  • Code Ownership: The CODEOWNERS file is updated to assign ownership of the /otdfctl/ directory to the @opentdf/cli team.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/pr-checks.yaml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.


A CLI's new home, Files copied, configs set, Migration's begun.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request represents a significant architectural shift for the otdfctl CLI, moving it to a dedicated repository and introducing a wealth of new features. The primary focus is on expanding policy management capabilities, offering granular control over various policy entities and cryptographic keys. This refactor also brings a new testing framework and comprehensive documentation, laying a solid foundation for future development and improved user interaction.

Highlights

  • CLI Migration and Restructuring: The otdfctl CLI has been migrated to its own repository, involving extensive file copying and configuration updates. This includes a new Makefile for streamlined build processes and a comprehensive README for user guidance.
  • Enhanced Policy Management Commands: Introduced a full suite of CRUD (Create, Read, Update, Delete) operations for various policy components, including actions, attributes, attribute values, namespaces, obligations, registered resources, resource mappings, subject condition sets, and subject mappings. This significantly expands the CLI's capability to manage OpenTDF policies.
  • Advanced Key Management Features: Implemented detailed commands for managing KAS (Key Access Server) keys, including creation, rotation, import, and listing of key mappings. This also includes functionality for managing KAS registry entries and provider configurations, offering granular control over cryptographic keys.
  • Comprehensive End-to-End Testing: Added a robust set of Bats-based end-to-end tests covering all new and existing CLI commands, ensuring the stability and correctness of the new features and the overall CLI functionality. This also includes integration with TestRail for test result reporting.
  • Improved Documentation and User Experience: Integrated extensive Markdown documentation for all commands and subcommands, which drives the CLI's help system and supports internationalization. This aims to provide a clearer and more consistent user experience.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/pr-checks.yaml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.


Files copied with care, New home, new purpose they bear, CLI now takes flight.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 153.800181ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 80.043308ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 402.237532ms
Throughput 248.61 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 38.904339054s
Average Latency 387.897018ms
Throughput 128.52 requests/second

Copy link
Copy Markdown
Contributor

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

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 the otdfctl CLI by copying a large number of files into the repository. The changes include Go source code for the CLI commands, Makefiles, documentation, and end-to-end tests. My review focused on the overall structure and patterns in the newly added code. I've identified a few areas for improvement related to consistency in deprecation handling and potential performance issues with client-side pagination. Overall, the code seems well-structured, but these minor issues should be addressed to improve usability and maintainability.

Copy link
Copy Markdown
Contributor

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

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 the otdfctl CLI tool by copying over a large number of files. The changes include the CLI's command structure, handlers, documentation, and end-to-end tests. My review focuses on potential issues in the newly added code. I've identified a bug in the Makefile's version handling, a significant performance issue related to client-side pagination, and a minor maintainability issue with flag parsing. Addressing these will improve the robustness and efficiency of the new CLI tool.

@github-actions
Copy link
Copy Markdown
Contributor

Copy link
Copy Markdown
Contributor

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

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 significant number of files by copying the otdfctl CLI tool into the repository. My review focuses on the newly added code, identifying opportunities for improvement in terms of maintainability, correctness, and efficiency. I've pointed out areas with duplicated code that could be refactored, potential performance bottlenecks, and minor issues in test files and configuration. Overall, the changes are substantial and form a good basis for the CLI within this repository.

@alkalescent alkalescent marked this pull request as ready for review March 24, 2026 15:30
@alkalescent alkalescent requested review from a team as code owners March 24, 2026 15:30
@alkalescent
Copy link
Copy Markdown
Contributor Author

Dismissing all automated comments and alerts since this PR's purpose is to migrate not change app + CI code.

@marythought
Copy link
Copy Markdown
Contributor

is there an ADR for this change? I'm aware of the benefits but unclear on the tradeoffs of this approach, if any. Downloading the latest otdfctl package is a part of the quickstart guide: https://github.com/opentdf/docs/blob/main/static/quickstart/install.sh#L132. Is it just a matter of changing the location for where to find this, or will the whole build/release process need to change as a subcomponent of platform?

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 190.343037ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 99.78324ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 371.600238ms
Throughput 269.11 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.903301218s
Average Latency 396.94069ms
Throughput 125.30 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

marythought
marythought previously approved these changes Mar 25, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 205.69506ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 102.845014ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 415.139414ms
Throughput 240.88 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.553236078s
Average Latency 413.951419ms
Throughput 120.33 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 182.701644ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 87.360151ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 407.643175ms
Throughput 245.31 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.499239757s
Average Latency 403.503632ms
Throughput 123.46 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from 01cff81 to d66bd5b Compare March 26, 2026 22:46
@alkalescent alkalescent changed the title feat(cli): copy otdfctl files feat(cli): migrate otdfctl into platform monorepo Mar 26, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 166.485556ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 78.668892ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 396.099222ms
Throughput 252.46 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.288281356s
Average Latency 401.603829ms
Throughput 124.11 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from d66bd5b to fc2fac5 Compare March 27, 2026 00:07
@github-actions
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from fc2fac5 to 24366f4 Compare March 27, 2026 00:58
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 204.352661ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 100.929906ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 381.655582ms
Throughput 262.02 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.866729204s
Average Latency 396.272151ms
Throughput 125.42 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 190.728608ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 100.144784ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 381.660831ms
Throughput 262.01 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.289880319s
Average Latency 401.834414ms
Throughput 124.10 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 157.366647ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 84.84821ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 397.04027ms
Throughput 251.86 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.161443162s
Average Latency 399.633575ms
Throughput 124.50 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from 07bc639 to 5e4def8 Compare April 6, 2026 22:45
alkalescent added a commit that referenced this pull request Apr 6, 2026
Merge opentdf/otdfctl via git subtree into otdfctl/ subdirectory,
preserving full git history and tags. Remove files handled at the
platform root level (.github/, .gitignore, .golangci.yaml, CODEOWNERS,
CONTRIBUTING.md, LICENSE). Update root CODEOWNERS, .gitignore, and
pr-checks scope.

DSPX-2655

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 203.60474ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 103.226746ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 385.218466ms
Throughput 259.59 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 41.29493331s
Average Latency 410.884848ms
Throughput 121.08 requests/second

alkalescent and others added 8 commits April 10, 2026 11:34
git-subtree-dir: otdfctl
git-subtree-mainline: 1ebce73
git-subtree-split: 8284997
Merge opentdf/otdfctl via git subtree into otdfctl/ subdirectory,
preserving full git history and tags. Remove files handled at the
platform root level (.github/, .gitignore, .golangci.yaml, CODEOWNERS,
CONTRIBUTING.md, LICENSE). Update root CODEOWNERS, .gitignore, and
pr-checks scope.

DSPX-2655

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
Rewrite Go module path from github.com/opentdf/otdfctl to
github.com/opentdf/platform/otdfctl. Update all import statements,
add otdfctl to go.work workspace, and update Dockerfile.

DSPX-2656

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
* This PR updates the respective Makefiles for the monorepo and otdfctl
as well as restoring the build scripts from the original otdfctl repo.

- [ ] I have added or updated unit tests
- [ ] I have added or updated integration tests (if appropriate)
- [ ] I have added or updated documentation
### Proposed Changes

* Add otdfctl to the checks.yaml go job matrix for govulncheck,
golangci-lint, unit tests, and go fmt/tidy checks.

### Checklist

- [ ] I have added or updated unit tests
- [ ] I have added or updated integration tests (if appropriate)
- [ ] I have added or updated documentation

### Testing Instructions

---------

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
- Rewrites the `otdfctl-test` CI job in `checks.yaml` to use local
composite action references (`./test/start-up-with-containers`,
`./otdfctl/e2e`) instead of cross-repo checkouts from `opentdf/otdfctl`
- Updates `otdfctl/e2e/action.yaml`: removes external checkout step,
removes `otdfctl-ref` input, uses `otdfctl/v0.26.2` subtree tag for
legacy binary build
- Updates `nightly-checks.yaml` to build otdfctl from
`platform/otdfctl/` instead of checking out `opentdf/otdfctl` separately
- Restores `tui/` directory lint exclusion (matching original otdfctl
config) and fixes ~60 lint errors (gofumpt, unused nolint directives,
perfsprint, sloglint, revive)
- Adds `.golangci.yaml` exclusion rules for deferred refactoring-level
fixes (contextcheck, revive
unused-parameter/unexported-return/var-naming)

Resolves [DSPX-2659](https://virtru.atlassian.net/browse/DSPX-2659)

- [ ] `otdfctl-test` CI job passes (all 19 BATS e2e test files)
- [ ] Legacy v0.26.2 binary build succeeds via `git worktree add
../otdfctl_v0.26.2 otdfctl/v0.26.2`
- [ ] Profile keyring tests pass with legacy binary
- [ ] `golangci-lint run ./...` from `otdfctl/` passes with 0 issues
- [ ] `go test ./...` from `otdfctl/` passes
- [ ] Nightly-checks workflow syntax is valid

[DSPX-2659]:
https://virtru.atlassian.net/browse/DSPX-2659?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

---------

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
# Step 1: Artifact Model

  ## Summary

  This PR implements step 1 of the policy migration plan.

It adds the initial versioned artifact model for migrate policy-graph
output under migrations/artifact, with the current schema implemented as
v1.0.0.

  ## Included

  - Shared ArtifactMetadata for:
      - schema
      - name
      - run_id
      - created_at
  - Version-based artifact construction using semver
  - Initial private v1 schema implementation
  - Typed summary model
  - Summary() returning JSON-encoded summary data
  - Write() support on the artifact interface
  - Stubbed Build() and Commit() methods for later steps
  - Unit tests for top-level dispatch and v1 schema behavior

  ## Not Included

  - Build logic
  - Commit logic
  - Prune integration

## Example of schema

```json
 {
    "metadata": {
      "schema": "v1.0.0",
      "name": "policy-migration",
      "run_id": "8f6fb617-9e95-4b66-b0b7-b91f6c88e1d1",
      "created_at": "2026-04-07T15:30:00Z"
    },
    "summary": {
      "counts": {
        "namespaces": 1,
        "actions": 1,
        "subject_condition_sets": 0,
        "subject_mappings": 0,
        "registered_resources": 1,
        "obligation_triggers": 0,
        "skipped": 0
      }
    },
    "skipped": [],
    "namespaces": [
      {
        "fqn": "https://example.com",
        "id": "11111111-1111-1111-1111-111111111111",
        "actions": [
          "22222222-2222-2222-2222-222222222222"
        ],
        "subject_condition_sets": [],
        "subject_mappings": [],
        "registered_resources": [
          "33333333-3333-3333-3333-333333333333"
        ],
        "obligation_triggers": []
      }
    ],
    "actions": [
      {
        "source": {
          "id": "22222222-2222-2222-2222-222222222222",
          "name": "read-document",
          "namespace_id": null,
          "is_standard": false
        },
        "targets": [
          {
            "namespace_id": "11111111-1111-1111-1111-111111111111",
            "namespace_fqn": "https://example.com",
            "id": "44444444-4444-4444-4444-444444444444"
          }
        ]
      }
    ],
    "subject_condition_sets": [],
    "subject_mappings": [],
    "registered_resources": [
      {
        "source": {
          "id": "33333333-3333-3333-3333-333333333333",
          "name": "finance-reports",
          "namespace_id": null,
          "values": [
            {
              "id": "55555555-5555-5555-5555-555555555555",
              "value": "/reports/finance/*",
              "action_attribute_values": [
                {
                  "action_id": "22222222-2222-2222-2222-222222222222",
                  "attribute_value_id": "66666666-6666-6666-6666-666666666666"
                }
              ]
            }
          ]
        },
        "targets": [
          {
            "namespace_id": "11111111-1111-1111-1111-111111111111",
            "namespace_fqn": "https://example.com",
            "id": "77777777-7777-7777-7777-777777777777",
            "values": [
              {
                "id": "88888888-8888-8888-8888-888888888888",
                "value": "/reports/finance/*",
                "action_attribute_values": [
                  {
                    "action_id": "44444444-4444-4444-4444-444444444444",
                    "attribute_value_id": "66666666-6666-6666-6666-666666666666"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "obligation_triggers": []
  }
```



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Formalized artifact schema/version framework with v1.0.0 as the
baseline
* Standardized artifact lifecycle interface and artifact metadata
(schema, name, run ID, timestamp)
  * Defaulting to the current schema version when no version is provided

* **Tests**
* Added comprehensive tests for version selection, v1 schema
initialization, summaries, writing, and error cases
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
### Proposed Changes

* Adds the new otdfctl migrate command scaffold and related docs for
namespaced policy migration. The work splits the migrate CLI into its
own command package, adds hidden stub subcommands for
namespaced-policy and prune namespaced-policy, preserves the legacy
registered-resources path as hidden, and updates the migration plan/docs
to reflect the new command structure

### Checklist

- [ ] I have added or updated unit tests
- [ ] I have added or updated integration tests (if appropriate)
- [ ] I have added or updated documentation

### Testing Instructions
@alkalescent alkalescent force-pushed the DSPX-2655-migrate-otdfctl branch from ac9d36a to 40e396b Compare April 10, 2026 15:37
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 199.785887ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 95.219397ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 381.184133ms
Throughput 262.34 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 40.049292722s
Average Latency 398.394512ms
Throughput 124.85 requests/second

### Proposed Changes

* Add otdfctl component to platform release-please configuration for
independent versioned releases
* Tags follow the monorepo per-component pattern: `otdfctl/v0.30.0`
* Register `otdfctl/pkg/config/config.go` as extra-file so
release-please bumps the `Version` constant (already has `//
x-release-please-version` marker)
* Create release workflow that triggers on `otdfctl/v*` tags, builds 8
cross-platform binaries (darwin amd64/arm64, linux amd64/arm/arm64,
windows amd64/arm/arm64), and uploads artifacts to the GitHub release

#### Files added/modified

| File | Change |
|------|--------|
| `release-please-config.main.json` | Add `otdfctl` package entry with
`extra-files` |
| `release-please-manifest.json` | Add `"otdfctl": "0.30.0"` version
tracking |
| `release-please-config.otdfctl.json` | **New** — component config for
`release/otdfctl/vX.Y` branches |
| `release-otdfctl.yaml` | **New** — build and upload workflow on
release publish |

#### PR Stack (DSPX-2654)

1. #3205 — Subtree merge + module path rewrite (DSPX-2655, DSPX-2656)
2. #3208 — Makefile and build scripts (DSPX-2657)
3. #3221 — CI workflows (DSPX-2658)
4. #3236 — e2e tests and lint fixes (DSPX-2659)
5. **This PR** — Release pipeline (DSPX-2660)

### Checklist

- [ ] I have added or updated unit tests
- [x] I have added or updated integration tests (if appropriate)
- [x] I have added or updated documentation

### Testing Instructions

- Verify JSON configs are valid: `cat
.github/release-please/release-please-config.main.json | jq
.packages.otdfctl`
- Verify manifest version: `cat
.github/release-please/release-please-manifest.json | jq .otdfctl`
- Verify `reusable_release-please.yaml` config lookup: branch
`release/otdfctl/v0.30` → sanitized name `otdfctl` → resolves to
`release-please-config.otdfctl.json`
- Full release flow testable after merge by creating a manual release
with tag `otdfctl/v0.30.0`

---------

Signed-off-by: Krish Suchak <suchak.krish@gmail.com>
- name: Extract version from tag
id: version
run: |
TAG="${{ github.event.release.tag_name }}"

Check failure

Code scanning / zizmor

code injection via template expansion Error

code injection via template expansion
- name: Upload release artifacts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload "${{ github.event.release.tag_name }}" ./otdfctl/output/*

Check failure

Code scanning / zizmor

code injection via template expansion Error

code injection via template expansion
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results, click to expand

Benchmark authorization.GetDecisions Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 194.203419ms

Benchmark authorization.v2.GetMultiResourceDecision Results:

Metric Value
Approved Decision Requests 1000
Denied Decision Requests 0
Total Time 96.888656ms

Benchmark Statistics

Name № Requests Avg Duration Min Duration Max Duration

Bulk Benchmark Results

Metric Value
Total Decrypts 100
Successful Decrypts 100
Failed Decrypts 0
Total Time 390.555711ms
Throughput 256.05 requests/second

TDF3 Benchmark Results:

Metric Value
Total Requests 5000
Successful Requests 5000
Failed Requests 0
Concurrent Requests 50
Total Time 39.796018792s
Average Latency 395.987096ms
Throughput 125.64 requests/second

@github-actions
Copy link
Copy Markdown
Contributor

⚠️ Govulncheck found vulnerabilities ⚠️

The following modules have known vulnerabilities:

  • examples
  • otdfctl
  • sdk
  • service
  • lib/fixtures
  • tests-bdd

See the workflow run for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp:ci Github Actions Work size/xl

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants