Promotion 2026-05-26 prod (#8052)#8057
Open
achave11-ucsc wants to merge 103 commits into
Open
Conversation
The next commit adds an assertion to the mirror service that would fail during this check after the first request due to the missing `source` attribute
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The `to_json`, `from_json`, `_cls_field`, `_cls_for_name`, and `__init_subclass__` methods were added in 964c6a2 to serialize `Authentication` instances into Step Functions state for curl manifest generation. That usage was removed in a subsequent refactor, leaving the methods exercised only by their own doctest. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scaffold for minting Azul Personal Access Tokens (APATs). When a curl manifest is generated, the manifest controller attempts to mint an APAT for the authenticated user. The user service resolves the access token via Google tokeninfo endpoint to obtain the `sub` claim, then looks up the stored tokens in DynamoDB. If the user has not previously completed the authorization flow, the exception is caught and the manifest falls back to the regular access token. The actual JWT minting and KMS signing are not yet implemented. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use a private PyJWT instance instead of the global jwt module functions, so that a custom signing algorithm can later be registered without affecting other code in the process. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement APAT minting with KMS-backed JWT signing. A custom PyJWT Algorithm subclass delegates RS256 signing and verification to AWS KMS. The algorithm is registered on a private PyJWT instance to avoid conflicts with the global JWT state. The minted token is verified immediately after signing to confirm the KMS round-trip. Also adds the KMS key and alias in Terraform, IAM permissions for kms:Sign/Verify/GetPublicKey, and APAT config properties. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reduce KMS provisioning duplication (#8007) Consolidate the per-key config (name, usage, spec, alias) into a frozen KMSKey dataclass. Terraform and IAM policy now use comprehensions over Config.kms_keys instead of repeating the pattern for each key. The APAT token expiration moves to UserService since it is unrelated to the KMS key lifecycle. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add APAT validation and token exchange to the repository controller. When a request carries a bearer token that looks like an APAT, validate it via KMS, look up the user in DynamoDB, refresh the Google access token if it's about to expire, and return the usable access token. Forged or expired APATs now yield a 401 instead of a 500. Also store access token expiration in DynamoDB to avoid a round trip to Google's tokeninfo endpoint on every request, and move the unknown-user check into get_user() to simplify callers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…n non-dataset endpoints (#8035)
8 tasks
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## prod #8057 +/- ##
==========================================
- Coverage 85.02% 84.84% -0.18%
==========================================
Files 165 165
Lines 23667 24169 +502
==========================================
+ Hits 20123 20507 +384
- Misses 3544 3662 +118 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
hannes-ucsc
approved these changes
May 28, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Linked issue: #8052
Checklist
Author
prodpromotions/yyyy-mm-dd-prodPromotion yyyy-mm-ddprodAuthor (reindex)
reindex:prodor the changes introduced by it will not require reindexing ofprodreindex:partialand its description documents the specific reindexing procedure forprodor requires a full reindex or is not labeledreindex:prodAuthor (mirror)
mirror:prodor the changes introduced by it will not require mirroring ofprodmirror:partialand its description documents the specific mirroring procedure forprodor requires a full mirroring or is not labeledmirror:prodAuthor (upgrading deployments)
upgradeor does not require upgrading deploymentsdeploy:sharedor does not modifydocker_images.json, and does not require deploying thesharedcomponent for any other reasondeploy:gitlabor does not require deploying thegitlabcomponentdeploy:runneror does not require deploying therunnerimageAuthor (before every review)
prodinto PR branch to integrate upstream changes)System administrator (after approval)
no sandboxN reviewslabel is accurateOperator
Operator (deploy
.sharedand.gitlabcomponents)_select prod.shared && CI_COMMIT_REF_NAME=prod make -C terraform/shared apply_keep_unusedor this PR is not labeleddeploy:shared_select prod.gitlab && python scripts/create_gitlab_snapshot.py --no-restart(see operator manual for details) or this PR is not labeledbackup:gitlab_select prod.gitlab && CI_COMMIT_REF_NAME=prod make -C terraform/gitlab applyor this PR is not labeleddeploy:gitlabdeploy:gitlabdeploy:gitlabSystem administrator (post-deploy of
.gitlabcomponent)prod.gitlabare complete or this PR is not labeleddeploy:gitlabOperator (deploy runner image)
_select prod.gitlab && make -C terraform/gitlab/runneror this PR is not labeleddeploy:runnerOperator (merge the branch)
ptagsOperator (main build)
prodprodprodprodor this PR is not labeledupgrade, or upgrade instructions do not apply toprod_select prod.shared && make -C terraform/shared applyor this PR is not labeleddeploy:shared1 Promoted issues and PRs are referenced in the titles of the commits
that the promotion branch introduces to the stable branch. Prior to the
promotion, the status of promoted issues (PRs) is Lower (Merged lower).
Promoted PRs in status Done do not need to be moved.
Operator (reindex)
prodor this PR is neither labeledreindex:partialnorreindex:prodprodor this PR is neither labeledreindex:partialnorreindex:prodprodor this PR is neither labeledreindex:partialnorreindex:prodprodor this PR does not require reindexingprodprodor this PR does not require reindexingprodprodor this PR does not require reindexingprodprodor this PR does not require reindexingprodprodor this PR does not require reindexingproddeploy_browserjob in the GitLab pipeline for this PR inprodor this PR does not require reindexingprodOperator (mirroring)
prodor this PR is not labelledmirror:prodprodor this PR is not labelledmirror:prodprodor this PR is not labelledmirror:prodOperator
System administrator
Shorthand for review comments
Lline is too longWline wrapping is wrongQbad quotesFother formatting problem