Reusable GitHub Actions for managing GitHub App authentication, organization secrets, AWS Secrets Manager, AWS IAM access keys, and Supabase database passwords.
| Action | Purpose | Use Case |
|---|---|---|
get-jwt-token | Generate GitHub App JWT | Authentication to GitHub API |
get-github-app-token | Get installation token (JWT + access) | One-step GitHub App auth |
list-org-secrets | List organization secrets | Audit or verify secrets |
update-org-secret | Update GitHub org secret | Set specific secret values |
update-aws-secret | Update AWS secret with custom value | Set AWS secrets to known values |
rotate-aws-secret | Auto-generate and update AWS secret | Automated secret rotation |
rotate-aws-access-key | Rotate AWS IAM access keys | Rotate IAM user access keys |
rotate-supabase-db-password | Auto-generate and update Supabase DB password | Automated Supabase password rotation |
- Use
update-aws-secretwhen you need to set a secret to a specific value (e.g., API keys from external services, configuration values) - Use
rotate-aws-secretwhen you need to generate a new random value for security (e.g., database passwords, internal API keys, tokens) - Use
rotate-aws-access-keywhen you need to rotate IAM user access keys (creates new key and deletes old one)
Generates a JWT token for GitHub App authentication.
Inputs:
app-id(required): GitHub App IDprivate-key(required): GitHub App private key (PEM format)
Outputs:
jwt-token: Generated JWT token
Example:
- uses: berkeleycompute/actions/get-jwt-token@mainid: get-jwtwith:
app-id: ${{ secrets.GH_APP_ID }}private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}Gets an installation access token from a JWT token.
Inputs:
jwt-token(required): JWT token fromget-jwt-tokenactioninstallation-id(required): GitHub App installation ID
Outputs:
token: Installation access tokenexpires-at: Token expiration timestamp
Example:
- uses: berkeleycompute/actions/get-installation-token@mainid: get-tokenwith:
jwt-token: ${{ steps.get-jwt.outputs.jwt-token }}installation-id: ${{ secrets.GH_APP_INSTALLATION_ID }}Lists all organization secrets.
Inputs:
token(required): Installation access tokenorganization(required): Organization name
Outputs:
secrets-list: JSON array of organization secretssecrets-count: Number of secrets found
Example:
- uses: berkeleycompute/actions/list-org-secrets@mainid: list-secretswith:
token: ${{ steps.get-token.outputs.token }}organization: ${{ github.repository_owner }}Updates or creates an organization secret.
Inputs:
token(required): Installation access tokenorganization(required): Organization namesecret-name(required): Name of the secret to updatesecret-value(required): Value to set for the secret
Outputs:
success: Whether the secret was updated successfullysecret-name: Name of the secret that was updated
Example:
- uses: berkeleycompute/actions/update-org-secret@mainid: update-secretwith:
token: ${{ steps.get-token.outputs.token }}organization: ${{ github.repository_owner }}secret-name: 'MY_SECRET'secret-value: 'my-secret-value'Updates a secret in AWS Secrets Manager using environment-specific AWS credentials.
| Parameter | Required | Default | Description |
|---|---|---|---|
environment | ✅ Yes | - | Environment to target. Must be one of: dev, devops, prod, or stage. This parameter validates which environment you're updating and ensures you're using the correct credentials. |
aws-access-key-id | ✅ Yes | - | AWS Access Key ID for the specified environment. Use organization secrets: AWS_ACCESS_KEY_DEV, AWS_ACCESS_KEY_DEVOPS, AWS_ACCESS_KEY_PROD, or AWS_ACCESS_KEY_STAGE. |
aws-secret-access-key | ✅ Yes | - | AWS Secret Access Key for the specified environment. Use organization secrets: AWS_SECRET_KEY_DEV, AWS_SECRET_KEY_DEVOPS, AWS_SECRET_KEY_PROD, or AWS_SECRET_KEY_STAGE. |
aws-region | ❌ No | us-east-1 | AWS Region where the secret is stored (e.g., us-west-2, us-east-1, eu-west-1). |
secret-arn | ✅ Yes | - | Full ARN of the AWS Secrets Manager secret to update. Format: arn:aws:secretsmanager:REGION:ACCOUNT_ID:secret:SECRET_NAME-XXXXX |
secret-value | ✅ Yes | - | The new value to set for the secret. Can be plaintext or JSON string. For JSON secrets, pass a stringified JSON object. |
| Output | Description |
|---|---|
success | Boolean indicating whether the secret was updated successfully (true or false) |
secret-arn | The full ARN of the secret that was updated |
version-id | The version ID assigned by AWS to this secret update |
Environment Validation: The action validates that
environmentmatches one of the allowed values (dev,devops,prod,stage) and provides helpful error messages if mismatched credentials are used.Credential Matching: Make sure the AWS credentials you pass match the environment. For example, if
environment: 'devops', you must useAWS_ACCESS_KEY_DEVOPSandAWS_SECRET_KEY_DEVOPS.Secret ARN Format: The secret ARN must be the full ARN, not just the secret name. You can find this in the AWS Secrets Manager console or by running:
aws secretsmanager describe-secret --secret-id YOUR_SECRET_NAME
JSON Secrets: If your secret stores JSON, pass it as a string:
secret-value: '{"key": "value", "another": "data"}'
# Update a secret in the devops environment
- uses: berkeleycompute/actions/update-aws-secret@mainid: update-aws-secretwith:
environment: 'devops'aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_DEVOPS }}aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY_DEVOPS }}aws-region: 'us-west-2'secret-arn: 'arn:aws:secretsmanager:us-west-2:123456789012:secret:my-secret-abc123'secret-value: 'my-secret-value'Step 1: Identify your environment
Determine which environment you're updating: dev, devops, prod, or stage.
Step 2: Get the Secret ARN Find the ARN of your secret in AWS Secrets Manager. It looks like:
arn:aws:secretsmanager:us-west-2:123456789012:secret:my-secret-name-AbCdEf
Step 3: Use the correct credentials Based on your environment, use the matching organization secrets:
- For
dev: useAWS_ACCESS_KEY_DEVandAWS_SECRET_KEY_DEV - For
devops: useAWS_ACCESS_KEY_DEVOPSandAWS_SECRET_KEY_DEVOPS - For
prod: useAWS_ACCESS_KEY_PRODandAWS_SECRET_KEY_PROD - For
stage: useAWS_ACCESS_KEY_STAGEandAWS_SECRET_KEY_STAGE
Step 4: Set the region
Specify the AWS region where your secret is stored (defaults to us-east-1 if not specified).
Automatically generates a new secure random value and updates an AWS Secrets Manager secret. Perfect for automated secret rotation.
| Parameter | Required | Default | Description |
|---|---|---|---|
environment | ✅ Yes | - | Environment to target. Must be one of: dev, devops, prod, or stage. |
aws-access-key-id | ✅ Yes | - | AWS Access Key ID for the specified environment. Use organization secrets: AWS_ACCESS_KEY_<ENV>. |
aws-secret-access-key | ✅ Yes | - | AWS Secret Access Key for the specified environment. Use organization secrets: AWS_SECRET_KEY_<ENV>. |
aws-region | ❌ No | us-east-1 | AWS Region where the secret is stored. |
secret-arn | ✅ Yes | - | Full ARN of the AWS Secrets Manager secret to rotate. |
secret-length | ❌ No | 32 | Length of the generated secret (minimum: 8, maximum: 256). |
secret-type | ❌ No | alphanumeric | Type of secret to generate: alphanumeric, base64, or hex. |
include-special-chars | ❌ No | true | Include special characters in alphanumeric secrets (true or false). |
| Output | Description |
|---|---|
success | Boolean indicating whether the secret was rotated successfully |
secret-arn | The full ARN of the secret that was rotated |
version-id | The version ID assigned by AWS to this secret rotation |
new-secret-value | The newly generated secret value (masked in logs, use to update dependent services) |
alphanumeric: Random letters, numbers, and optionally special characters (!@#$%^&*()_+-=[]{}|;:,.<>?)base64: Base64-encoded random byteshex: Hexadecimal string (0-9, a-f)
# Rotate a database password in the prod environment
- uses: berkeleycompute/actions/rotate-aws-secret@mainid: rotate-db-passwordwith:
environment: 'prod'aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_PROD }}aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY_PROD }}aws-region: 'us-west-2'secret-arn: 'arn:aws:secretsmanager:us-west-2:123456789012:secret:db-password-abc123'secret-length: '32'secret-type: 'alphanumeric'include-special-chars: 'true'
- name: Use the new secretrun: | echo "Secret rotated successfully!" echo "New version: ${{ steps.rotate-db-password.outputs.version-id }}" # The new secret value is in: ${{ steps.rotate-db-password.outputs.new-secret-value }}name: Rotate Production Database Passwordon:
schedule:
- cron: '0 2 * * 0'# Every Sunday at 2 AM UTCworkflow_dispatch:
jobs:
rotate-password:
runs-on: ubuntu-lateststeps:
- name: Rotate AWS secretid: rotateuses: berkeleycompute/actions/rotate-aws-secret@mainwith:
environment: 'prod'aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_PROD }}aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY_PROD }}aws-region: 'us-east-1'secret-arn: ${{ secrets.PROD_DB_PASSWORD_ARN }}secret-length: '48'secret-type: 'alphanumeric'
- name: Update database with new passwordrun: | # Use the new password to update your database # The value is available in: ${{ steps.rotate.outputs.new-secret-value }} echo "Password rotated to version: ${{ steps.rotate.outputs.version-id }}" - name: Notify teamif: success()run: echo "✅ Database password rotated successfully"Automatic Generation: The action generates a cryptographically secure random value - you don't need to provide one.
New Secret in Output: The newly generated secret is available in the
new-secret-valueoutput. Use this to update other services that depend on this secret.Minimum Length: For security, the minimum secret length is 8 characters. Recommended: 32+ for passwords, 64+ for API keys.
Secret Types Guide:
- Use
alphanumericwith special chars for passwords - Use
hexfor API keys and tokens - Use
base64for binary data or when you need maximum entropy
- Use
Rotates AWS IAM access keys by creating a new access key and deleting the old one. This is useful for security best practices and automated key rotation.
| Parameter | Required | Default | Description |
|---|---|---|---|
environment | ✅ Yes | - | Environment to target. Must be one of: dev, devops, prod, or stage. |
aws-access-key-id | ✅ Yes | - | AWS Access Key ID for the specified environment. Use organization secrets: AWS_ACCESS_KEY_<ENV>. |
aws-secret-access-key | ✅ Yes | - | AWS Secret Access Key for the specified environment. Use organization secrets: AWS_SECRET_KEY_<ENV>. |
aws-region | ❌ No | us-east-1 | AWS Region where the IAM user is located. |
iam-username | ✅ Yes | - | IAM username whose access key will be rotated. |
update-github-secrets | ❌ No | false | Whether to automatically update GitHub organization secrets with new credentials. Requires github-pat. |
github-pat | ❌ No | - | GitHub Personal Access Token with admin:org permissions. Required if update-github-secrets is true. |
github-org | ❌ No | - | GitHub organization name. Defaults to GITHUB_REPOSITORY_OWNER if not provided. |
| Output | Description |
|---|---|
success | Boolean indicating whether the access key was rotated successfully |
new-access-key-id | The newly created access key ID (masked in logs) |
new-secret-access-key | The newly created secret access key (masked in logs) |
old-access-key-id | The old access key ID that was deleted |
# Rotate an IAM user's access key
- uses: berkeleycompute/actions/rotate-aws-access-key@mainid: rotate-access-keywith:
environment: 'devops'aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_DEVOPS }}aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY_DEVOPS }}aws-region: 'us-east-1'iam-username: 'my-iam-user'
- name: Use the new access keyrun: | echo "Access key rotated successfully!" echo "New Access Key ID: ${{ steps.rotate-access-key.outputs.new-access-key-id }}" # The new secret access key is in: ${{ steps.rotate-access-key.outputs.new-secret-access-key }}name: Rotate IAM Access Keyon:
schedule:
- cron: '0 2 * * 0'# Every Sunday at 2 AM UTCworkflow_dispatch:
inputs:
iam-username:
description: 'IAM username to rotate'required: truejobs:
rotate-key:
runs-on: ubuntu-lateststeps:
- name: Rotate AWS access keyid: rotateuses: berkeleycompute/actions/rotate-aws-access-key@mainwith:
environment: 'prod'aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_PROD }}aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY_PROD }}aws-region: 'us-east-1'iam-username: ${{ github.event.inputs.iam-username }}update-github-secrets: 'true'# Automatically update GitHub organization secretsgithub-pat: ${{ secrets.PAT_GITHUB }} # PAT with admin:org permissionsgithub-org: ${{ github.repository_owner }} # Organization name
- name: Verify rotation and secrets updaterun: | # The action automatically updated GitHub secrets if update-github-secrets was true echo "Old key deleted: ${{ steps.rotate.outputs.old-access-key-id }}" echo "New key created: ${{ steps.rotate.outputs.new-access-key-id }}" echo "GitHub secrets updated automatically by the action" # The new secret access key is in: ${{ steps.rotate.outputs.new-secret-access-key }} - name: Notify teamif: success()run: echo "✅ IAM access key rotated successfully for ${{ github.event.inputs.iam-username }}"AWS Key Limit: Each IAM user can have a maximum of 2 access keys. If the user already has 2 keys, you must delete one manually before running this action.
Current Key Usage: If the access key being used for authentication is the one being rotated, the action will still work, but ensure you save the new key before the old one is deleted.
New Keys in Output: The newly created access key ID and secret access key are available in the outputs. Save these immediately as the secret access key is only shown once.
Update Dependencies: After rotation, update all services, applications, and configurations that use the old access key with the new credentials.
Automatic GitHub Secrets Update: The action can automatically update GitHub organization secrets after a successful rotation:
- Set
update-github-secrets: trueto enable - Provide
github-patwithadmin:orgpermissions - Optionally specify
github-org(defaults to repository owner) - If enabled, the action will update
AWS_ACCESS_KEY_<ENV>andAWS_SECRET_KEY_<ENV>secrets automatically
- Set
IAM Permissions: The AWS credentials used must have the following IAM permissions:
iam:ListAccessKeys- to list existing keysiam:CreateAccessKey- to create new keys (intended for CLI/API usage)iam:DeleteAccessKey- to delete old keyssts:GetCallerIdentity- to verify new keys work (used during rotation)
Error Handling: The action follows a safe rotation process:
- Creates new key first
- Verifies new key works with AWS STS
- Only deletes old key if verification succeeds
- If verification fails, old key remains active and new key is preserved
Automatically generates a new secure random password and updates the Supabase database password via the Management API. Perfect for automated password rotation.
| Parameter | Required | Default | Description |
|---|---|---|---|
supabase-access-token | ✅ Yes | - | Supabase Management API access token. Get this from your Supabase dashboard under Settings > Access Tokens. |
project-ref | ✅ Yes | - | Supabase project reference ID. Found in your project's URL: https://supabase.com/dashboard/project/<project-ref>. |
password-length | ❌ No | 32 | Length of the generated password (minimum: 12, maximum: 128). Recommended: 32+ for production. |
include-special-chars | ❌ No | true | Include special characters in password (true or false). |
supabase-api-url | ❌ No | https://api.supabase.com | Supabase Management API base URL. Usually only needs to be changed for self-hosted instances. |
| Output | Description |
|---|---|
success | Boolean indicating whether the password was rotated successfully |
project-ref | The project reference that was updated |
new-password | The newly generated password (masked in logs, use to update dependent services) |
# Rotate a Supabase database password
- uses: berkeleycompute/actions/rotate-supabase-db-password@mainid: rotate-supabase-passwordwith:
supabase-access-token: ${{ secrets.SUPABASE_ACCESS_TOKEN }}project-ref: 'abcdefghijklmnop'password-length: '32'include-special-chars: 'true'
- name: Use the new passwordrun: | echo "Password rotated successfully!" # The new password is in: ${{ steps.rotate-supabase-password.outputs.new-password }}name: Rotate Supabase Database Passwordon:
schedule:
- cron: '0 2 * * 0'# Every Sunday at 2 AM UTCworkflow_dispatch:
jobs:
rotate-password:
runs-on: ubuntu-lateststeps:
- name: Rotate Supabase database passwordid: rotateuses: berkeleycompute/actions/rotate-supabase-db-password@mainwith:
supabase-access-token: ${{ secrets.SUPABASE_ACCESS_TOKEN }}project-ref: ${{ secrets.SUPABASE_PROJECT_REF }}password-length: '48'include-special-chars: 'true'
- name: Update connection stringsrun: | # Use the new password to update your application's connection strings # The value is available in: ${{ steps.rotate.outputs.new-password }} echo "Password rotated for project: ${{ steps.rotate.outputs.project-ref }}" - name: Notify teamif: success()run: echo "✅ Supabase database password rotated successfully"Automatic Generation: The action generates a cryptographically secure random password - you don't need to provide one.
Connection Termination: Resetting the database password will terminate all existing database connections. Ensure you update all applications and services that connect to this database with the new password.
Minimum Length: For security, the minimum password length is 12 characters. Recommended: 32+ for production databases.
Access Token Permissions: The Supabase access token must have permissions to update database passwords. This typically requires the token to have project management permissions.
New Password in Output: The newly generated password is available in the
new-passwordoutput. Use this to update other services that depend on this password (e.g., connection strings, environment variables, secrets managers).Finding Your Project Reference:
- Go to your Supabase project dashboard
- The project reference is in the URL:
https://supabase.com/dashboard/project/<project-ref> - Or find it in Project Settings > General
name: Manage Organization Secretson:
workflow_dispatch:
jobs:
manage-secrets:
runs-on: ubuntu-lateststeps:
# Step 1: Get JWT token
- uses: berkeleycompute/actions/get-jwt-token@mainid: get-jwtwith:
app-id: ${{ secrets.GH_APP_ID }}private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}# Step 2: Get installation access token
- uses: berkeleycompute/actions/get-installation-token@mainid: get-tokenwith:
jwt-token: ${{ steps.get-jwt.outputs.jwt-token }}installation-id: ${{ secrets.GH_APP_INSTALLATION_ID }}# Step 3: List secrets
- uses: berkeleycompute/actions/list-org-secrets@mainid: list-secretswith:
token: ${{ steps.get-token.outputs.token }}organization: ${{ github.repository_owner }}# Step 4: Update a secret
- uses: berkeleycompute/actions/update-org-secret@mainid: update-secretwith:
token: ${{ steps.get-token.outputs.token }}organization: ${{ github.repository_owner }}secret-name: 'MY_SECRET'secret-value: 'my-new-value'name: Update AWS Secreton:
workflow_dispatch:
inputs:
environment:
description: 'Environment (dev, devops, prod, stage)'required: truetype: choiceoptions:
- dev
- devops
- prod
- stagesecret-value:
description: 'New secret value'required: truejobs:
update-aws-secret:
runs-on: ubuntu-lateststeps:
- name: Set environment-specific secretsid: set-secretsrun: | ENV_UPPER=$(echo "${{ github.event.inputs.environment }}" | tr '[:lower:]' '[:upper:]') echo "env-upper=$ENV_UPPER" >> $GITHUB_OUTPUT - uses: berkeleycompute/actions/update-aws-secret@mainid: update-secretwith:
environment: ${{ github.event.inputs.environment }}aws-access-key-id: ${{ secrets[format('AWS_ACCESS_KEY_{0}', steps.set-secrets.outputs.env-upper)] }}aws-secret-access-key: ${{ secrets[format('AWS_SECRET_KEY_{0}', steps.set-secrets.outputs.env-upper)] }}aws-region: 'us-west-2'secret-arn: 'arn:aws:secretsmanager:us-west-2:123456789012:secret:my-secret-abc123'secret-value: ${{ github.event.inputs.secret-value }}
- name: Check resultrun: | echo "Secret updated: ${{ steps.update-secret.outputs.success }}" echo "Version ID: ${{ steps.update-secret.outputs.version-id }}"name: Update DevOps AWS Secreton:
workflow_dispatch:
inputs:
secret-value:
description: 'New secret value'required: truejobs:
update-devops-secret:
runs-on: ubuntu-lateststeps:
- uses: berkeleycompute/actions/update-aws-secret@mainwith:
environment: 'devops'aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_DEVOPS }}aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY_DEVOPS }}aws-region: 'us-east-1'secret-arn: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:devops-secret-abc123'secret-value: ${{ github.event.inputs.secret-value }}name: Manage AWS Secretson:
workflow_dispatch:
inputs:
action:
description: 'Action to perform'type: choicerequired: trueoptions:
- rotate-password
- update-api-keyenvironment:
description: 'Environment'type: choicerequired: trueoptions:
- dev
- devops
- prod
- stageapi-key:
description: 'API Key (only for update-api-key action)'required: falsejobs:
manage-secrets:
runs-on: ubuntu-lateststeps:
- name: Rotate database passwordif: github.event.inputs.action == 'rotate-password'id: rotateuses: berkeleycompute/actions/rotate-aws-secret@mainwith:
environment: ${{ github.event.inputs.environment }}aws-access-key-id: ${{ secrets[format('AWS_ACCESS_KEY_{0}', github.event.inputs.environment)] }}aws-secret-access-key: ${{ secrets[format('AWS_SECRET_KEY_{0}', github.event.inputs.environment)] }}aws-region: 'us-west-2'secret-arn: 'arn:aws:secretsmanager:us-west-2:123456789012:secret:db-password-abc123'secret-length: '48'
- name: Update API keyif: github.event.inputs.action == 'update-api-key'id: updateuses: berkeleycompute/actions/update-aws-secret@mainwith:
environment: ${{ github.event.inputs.environment }}aws-access-key-id: ${{ secrets[format('AWS_ACCESS_KEY_{0}', github.event.inputs.environment)] }}aws-secret-access-key: ${{ secrets[format('AWS_SECRET_KEY_{0}', github.event.inputs.environment)] }}aws-region: 'us-west-2'secret-arn: 'arn:aws:secretsmanager:us-west-2:123456789012:secret:api-key-xyz789'secret-value: ${{ github.event.inputs.api-key }}
- name: Report resultsrun: | if [ "${{ github.event.inputs.action }}" = "rotate-password" ]; then echo "✅ Password rotated successfully" echo "Version ID: ${{ steps.rotate.outputs.version-id }}" else echo "✅ API key updated successfully" echo "Version ID: ${{ steps.update.outputs.version-id }}" fiThese secrets must be set in your organization:
- GH_APP_ID: The GitHub App ID
- GH_APP_PRIVATE_KEY: The private key (PEM file contents) for the GitHub App
- GH_APP_INSTALLATION_ID: The installation ID
The GitHub App must have:
- Organization permissions:
Administration: Read and write
Environment-specific AWS credentials (where <ENV> is DEV, DEVOPS, PROD, or STAGE):
- AWS_ACCESS_KEY_DEV: AWS Access Key ID for dev environment
- AWS_SECRET_KEY_DEV: AWS Secret Access Key for dev environment
- AWS_ACCESS_KEY_DEVOPS: AWS Access Key ID for devops environment
- AWS_SECRET_KEY_DEVOPS: AWS Secret Access Key for devops environment
- AWS_ACCESS_KEY_PROD: AWS Access Key ID for prod environment
- AWS_SECRET_KEY_PROD: AWS Secret Access Key for prod environment
- AWS_ACCESS_KEY_STAGE: AWS Access Key ID for stage environment
- AWS_SECRET_KEY_STAGE: AWS Secret Access Key for stage environment
For update-aws-secret and rotate-aws-secret:
secretsmanager:PutSecretValue- to update secret valuessecretsmanager:DescribeSecret- to verify the secret exists (optional but recommended)
For rotate-aws-access-key:
iam:ListAccessKeys- to list existing access keys for a useriam:CreateAccessKey- to create new access keys (with CLI use case)iam:DeleteAccessKey- to delete old access keysiam:GetUser- to verify if user exists (optional, for user verification)iam:CreateUser- to create user if it doesn't exist (optional, for automated setup)iam:TagUser- to tag created users (optional)sts:GetCallerIdentity- to verify new access keys work (used during rotation)
SUPABASE_ACCESS_TOKEN: Supabase Management API access token
- Get this from your Supabase dashboard: Settings > Access Tokens
- Create a new token with appropriate permissions if needed
- The token must have permissions to update database passwords
SUPABASE_PROJECT_REF: Supabase project reference ID (optional, can be passed directly)
- Found in your project's URL:
https://supabase.com/dashboard/project/<project-ref> - Or in Project Settings > General
- Found in your project's URL:
The Supabase access token must have:
- Project management permissions - to update database passwords
- Access to the specific project you want to rotate the password for
- Log in to your Supabase dashboard
- Navigate to Settings > Access Tokens
- Create a new access token or use an existing one
- Store it securely in your GitHub secrets
To use these actions in other repositories:
- uses: berkeleycompute/actions/get-jwt-token@mainwith:
app-id: ${{ secrets.GH_APP_ID }}private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}Make sure the required organization secrets are available in the repository or organization where you're using these actions.