Skip to content

Promotion 2026-05-26 prod (#8052)#8057

Open
achave11-ucsc wants to merge 103 commits into
prodfrom
promotions/2026-05-26-prod
Open

Promotion 2026-05-26 prod (#8052)#8057
achave11-ucsc wants to merge 103 commits into
prodfrom
promotions/2026-05-26-prod

Conversation

@achave11-ucsc
Copy link
Copy Markdown
Member

@achave11-ucsc achave11-ucsc commented May 28, 2026

Linked issue: #8052

Checklist

Author

  • PR is assigned to the author
  • Status of PR is In progress
  • Target branch is prod
  • Name of PR branch matches promotions/yyyy-mm-dd-prod
  • PR is linked to the promotion issue it resolves
  • Status of linked issue is In progress
  • PR description links to linked issue
  • Title of linked issue matches Promotion yyyy-mm-dd
  • PR title starts with title of linked issue followed by prod
  • PR title references the linked issue

Author (reindex)

  • This PR is labeled reindex:prod or the changes introduced by it will not require reindexing of prod
  • This PR is labeled reindex:partial and its description documents the specific reindexing procedure for prod or requires a full reindex or is not labeledreindex:prod

Author (mirror)

  • This PR is labeled mirror:prod or the changes introduced by it will not require mirroring of prod
  • This PR is labeled mirror:partial and its description documents the specific mirroring procedure for prod or requires a full mirroring or is not labeledmirror:prod

Author (upgrading deployments)

  • This PR is labeled upgrade or does not require upgrading deployments
  • This PR is labeled deploy:shared or does not modify docker_images.json, and does not require deploying the shared component for any other reason
  • This PR is labeled deploy:gitlab or does not require deploying the gitlab component
  • This PR is labeled deploy:runner or does not require deploying the runner image

Author (before every review)

  • PR branch is up to date (if not, merge prod into PR branch to integrate upstream changes)
  • PR is not a draft
  • PR is awaiting requested review from system administrator
  • Status of PR is Review requested
  • PR is assigned to only the system administrator and the author

System administrator (after approval)

  • Actually approved the PR
  • Labeled PR as no sandbox
  • N reviews label is accurate
  • Status of PR is Approved
  • PR is assigned to only the operator and the author

Operator

  • Pushed PR branch to GitHub

Operator (deploy .shared and .gitlab components)

  • Ran _select prod.shared && CI_COMMIT_REF_NAME=prod make -C terraform/shared apply_keep_unused or this PR is not labeled deploy:shared
  • Ran _select prod.gitlab && python scripts/create_gitlab_snapshot.py --no-restart (see operator manual for details) or this PR is not labeled backup:gitlab
  • Ran _select prod.gitlab && CI_COMMIT_REF_NAME=prod make -C terraform/gitlab apply or this PR is not labeled deploy:gitlab
  • Checked the items in the next section or this PR is labeled deploy:gitlab
  • PR is assigned to only the system administrator and the author or this PR is not labeled deploy:gitlab

System administrator (post-deploy of .gitlab component)

  • Background migrations for prod.gitlab are complete or this PR is not labeled deploy:gitlab
  • PR is assigned to only the operator and the author

Operator (deploy runner image)

  • Ran _select prod.gitlab && make -C terraform/gitlab/runner or this PR is not labeled deploy:runner

Operator (merge the branch)

  • All status checks passed and the PR is mergeable
  • The title of the merge commit starts with the title of this PR
  • Added PR # reference to merge commit title
  • Collected commit title tags in merge commit title but excluded any p tags
  • Pushed merge commit to GitHub
  • Status of PR is Merged stable

Operator (main build)

  • Pushed merge commit to GitLab prod
  • Build passes on GitLab prod
  • Reviewed build logs for anomalies on GitLab prod
  • Applied upgrade instructions from UPGRADING.rst to prod or this PR is not labeled upgrade, or upgrade instructions do not apply to prod
  • Ran _select prod.shared && make -C terraform/shared apply or this PR is not labeled deploy:shared
  • Deleted PR branch from GitHub
  • PR is assigned to only the operator
  • Status of linked issue is Stable
  • Status of promoted1 PRs is Merged stable
  • Status of promoted1 issues is Stable

1 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)

  • Deindexed all unreferenced catalogs in prod or this PR is neither labeled reindex:partial nor reindex:prod
  • Deindexed specific sources in prod or this PR is neither labeled reindex:partial nor reindex:prod
  • Indexed specific sources in prod or this PR is neither labeled reindex:partial nor reindex:prod
  • Started reindex in prod or this PR does not require reindexing prod
  • Checked for, triaged and possibly requeued messages in both fail queues in prod or this PR does not require reindexing prod
  • Emptied fail queues in prod or this PR does not require reindexing prod
  • Restarted the Data Browser pipeline for the ucsc/hca/prod branch on GitLab in prod or this PR does not require reindexing prod
  • Restarted the Data Browser pipeline for the ucsc/lungmap/prod branch on GitLab in prod or this PR does not require reindexing prod
  • Restarted deploy_browser job in the GitLab pipeline for this PR in prod or this PR does not require reindexing prod

Operator (mirroring)

  • Started mirroring in prod or this PR is not labelled mirror:prod
  • Checked for, triaged and possibly requeued messages in mirror fail queue in prod or this PR is not labelled mirror:prod
  • Emptied mirror fail queue in prod or this PR is not labelled mirror:prod

Operator

  • PR is assigned to only the system administrator

System administrator

Shorthand for review comments

  • L line is too long
  • W line wrapping is wrong
  • Q bad quotes
  • F other formatting problem

nadove-ucsc and others added 30 commits May 8, 2026 15:24
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>
@achave11-ucsc achave11-ucsc linked an issue May 28, 2026 that may be closed by this pull request
8 tasks
Comment thread src/azul/service/user_service.py Dismissed
Comment thread src/azul/service/user_service.py Dismissed
Comment thread src/azul/service/user_service.py Dismissed
Comment thread src/azul/service/user_service.py Dismissed
@achave11-ucsc achave11-ucsc self-assigned this May 28, 2026
@achave11-ucsc achave11-ucsc added upgrade [process] PR includes commit requiring manual upgrade deploy:gitlab [process] PR requires deploying `gitlab` component deploy:shared [process] PR requires deploying `shared` component backup:gitlab [process] PR requires backing up GitLab instances labels May 28, 2026
@coveralls
Copy link
Copy Markdown

coveralls commented May 28, 2026

Coverage Status

coverage: 84.926% (-0.2%) from 85.104% — promotions/2026-05-26-prod into prod

@achave11-ucsc achave11-ucsc added deploy:runner [process] PR requires deploying `runner` component API API change affecting callers reqs [process] PR includes commit requiring ``make requirements`` labels May 28, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 28, 2026

Codecov Report

❌ Patch coverage is 74.77243% with 194 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.84%. Comparing base (0303df5) to head (b36d2b8).

Files with missing lines Patch % Lines
test/integration_test.py 0.00% 133 Missing ⚠️
src/azul/service/user_controller.py 69.49% 18 Missing ⚠️
src/azul/oauth2.py 9.09% 10 Missing ⚠️
src/azul/service/user_service.py 95.90% 7 Missing ⚠️
src/azul/service/manifest_controller.py 44.44% 5 Missing ⚠️
src/azul/service/repository_controller.py 64.28% 5 Missing ⚠️
src/azul/service/index_service.py 20.00% 4 Missing ⚠️
src/azul/opensearch.py 25.00% 3 Missing ⚠️
src/azul/__init__.py 88.88% 2 Missing ⚠️
src/azul/auth.py 90.00% 2 Missing ⚠️
... and 4 more
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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@hannes-ucsc hannes-ucsc added no sandbox [process] PR will not be tested in the sandbox 0 reviews [process] Lead didn't request any changes labels May 28, 2026
@hannes-ucsc hannes-ucsc removed their assignment May 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

0 reviews [process] Lead didn't request any changes API API change affecting callers backup:gitlab [process] PR requires backing up GitLab instances deploy:gitlab [process] PR requires deploying `gitlab` component deploy:runner [process] PR requires deploying `runner` component deploy:shared [process] PR requires deploying `shared` component no sandbox [process] PR will not be tested in the sandbox reqs [process] PR includes commit requiring ``make requirements`` upgrade [process] PR includes commit requiring manual upgrade

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Promotion 2026-05-26

6 participants