feat(app): Implement feature metric tracking #4898
Workflow file for this run
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
# Run dry-runs of staging deployment on release PRs | |
name: CI/CD Pull Request Release Please | |
on: | |
pull_request: | |
branches: [main] | |
paths-ignore: | |
- "tests/k6/**" | |
permissions: | |
contents: read | |
pull-requests: read | |
id-token: write | |
jobs: | |
verify-release-please-branch: | |
if: startsWith(github.head_ref, 'release-please-') | |
runs-on: ubuntu-latest | |
steps: | |
- run: echo "Confirmed to be a release please branch" | |
get-current-version: | |
name: Get current version | |
needs: [verify-release-please-branch] | |
uses: ./.github/workflows/workflow-get-current-version.yml | |
check-for-changes: | |
name: Check for changes | |
needs: [verify-release-please-branch] | |
uses: ./.github/workflows/workflow-check-for-changes.yml | |
generate-git-short-sha: | |
name: Generate git short sha | |
needs: [verify-release-please-branch] | |
uses: ./.github/workflows/workflow-generate-git-short-sha.yml | |
dry-run-deploy-infra-staging: | |
name: Deploy infra to staging (dry run) | |
needs: [generate-git-short-sha, get-current-version, check-for-changes] | |
uses: ./.github/workflows/workflow-deploy-infra.yml | |
secrets: | |
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
AZURE_SOURCE_KEY_VAULT_NAME: ${{ secrets.AZURE_SOURCE_KEY_VAULT_NAME }} | |
AZURE_SOURCE_KEY_VAULT_SUBSCRIPTION_ID: ${{ secrets.AZURE_SOURCE_KEY_VAULT_SUBSCRIPTION_ID }} | |
AZURE_SOURCE_KEY_VAULT_RESOURCE_GROUP: ${{ secrets.AZURE_SOURCE_KEY_VAULT_RESOURCE_GROUP }} | |
AZURE_SOURCE_KEY_VAULT_SSH_JUMPER_SSH_PUBLIC_KEY: ${{ secrets.AZURE_SOURCE_KEY_VAULT_SSH_JUMPER_SSH_PUBLIC_KEY }} | |
with: | |
environment: staging | |
region: norwayeast | |
dryRun: true | |
version: ${{ needs.get-current-version.outputs.version }}-${{ needs.generate-git-short-sha.outputs.gitShortSha }} | |
dry-run-deploy-apps-staging: | |
name: Deploy apps to staging (dry run) | |
needs: [generate-git-short-sha, get-current-version, check-for-changes] | |
uses: ./.github/workflows/workflow-deploy-apps.yml | |
secrets: | |
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
# todo: consider resolving these in another way since they are created in the infra-step | |
AZURE_RESOURCE_GROUP_NAME: ${{ secrets.AZURE_RESOURCE_GROUP_NAME }} | |
AZURE_ENVIRONMENT_KEY_VAULT_NAME: ${{ secrets.AZURE_ENVIRONMENT_KEY_VAULT_NAME }} | |
AZURE_CONTAINER_APP_ENVIRONMENT_NAME: ${{ secrets.AZURE_CONTAINER_APP_ENVIRONMENT_NAME }} | |
AZURE_APP_INSIGHTS_CONNECTION_STRING: ${{ secrets.AZURE_APP_INSIGHTS_CONNECTION_STRING }} | |
AZURE_APP_CONFIGURATION_NAME: ${{ secrets.AZURE_APP_CONFIGURATION_NAME }} | |
AZURE_SERVICE_BUS_NAMESPACE_NAME: ${{ secrets.AZURE_SERVICE_BUS_NAMESPACE_NAME }} | |
with: | |
environment: staging | |
dryRun: true | |
version: ${{ needs.get-current-version.outputs.version }}-${{ needs.generate-git-short-sha.outputs.gitShortSha }} | |
send-slack-message: | |
name: Send Slack message | |
needs: [dry-run-deploy-infra-staging, dry-run-deploy-apps-staging] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 | |
with: | |
egress-policy: audit | |
- name: Calculate max pull request body length | |
id: calculate-max-length | |
run: | | |
# Build the payload template using actual values where available | |
# Channel ID is typically around 11 characters (C1234567890) | |
ESTIMATED_CHANNEL_ID="C1234567890" | |
REPO_URL="https://github.com/${GITHUB_REPOSITORY}/pull/${{ github.event.pull_request.number }}" | |
PAYLOAD_TEMPLATE=$(cat <<EOF | |
{ | |
"channel": "${ESTIMATED_CHANNEL_ID}", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "PLACEHOLDER_CONTENT" | |
} | |
}, | |
{ "type": "divider" }, | |
{ | |
"type": "actions", | |
"elements": [ | |
{ | |
"type": "button", | |
"text": { | |
"type": "plain_text", | |
"text": "Open release PR" | |
}, | |
"url": "${REPO_URL}" | |
} | |
] | |
} | |
] | |
} | |
EOF | |
) | |
# Calculate template length (without the placeholder content) | |
PLACEHOLDER="PLACEHOLDER_CONTENT" | |
TEMPLATE_LENGTH=$((${#PAYLOAD_TEMPLATE} - ${#PLACEHOLDER})) | |
# Slack payload limit with safety margin | |
SLACK_PAYLOAD_LIMIT=3000 | |
SAFETY_MARGIN=100 | |
# Calculate maximum allowable length for PR content | |
MAX_BODY_LENGTH=$((SLACK_PAYLOAD_LIMIT - TEMPLATE_LENGTH - SAFETY_MARGIN)) | |
echo "Template length: $TEMPLATE_LENGTH" | |
echo "Max content length: $MAX_BODY_LENGTH" | |
echo "MAX_BODY_LENGTH=$MAX_BODY_LENGTH" >> $GITHUB_ENV | |
- name: Slackify markdown in pull request body | |
id: slackify | |
uses: LoveToKnow/slackify-markdown-action@698a1d4d0ff1794152a93c03ee8ca5e03a310d4e # v1.1.1 | |
with: | |
text: ${{ github.event.pull_request.body }} | |
- name: Trim slackified content if necessary | |
id: trim-slackified | |
run: | | |
SLACKIFIED_CONTENT="${{ steps.slackify.outputs.text }}" | |
MAX_LENGTH=${{ env.MAX_BODY_LENGTH }} | |
if [ ${#SLACKIFIED_CONTENT} -gt $MAX_LENGTH ]; then | |
# Account for the trimming message length to ensure we stay under limit | |
TRIM_MESSAGE="... (content trimmed due to length)" | |
AVAILABLE_LENGTH=$((MAX_LENGTH - ${#TRIM_MESSAGE})) | |
TRIMMED_CONTENT="${SLACKIFIED_CONTENT:0:$AVAILABLE_LENGTH}$TRIM_MESSAGE" | |
echo "FINAL_CONTENT<<EOF" >> $GITHUB_ENV | |
echo "$TRIMMED_CONTENT" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
else | |
echo "FINAL_CONTENT<<EOF" >> $GITHUB_ENV | |
echo "$SLACKIFIED_CONTENT" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
fi | |
- name: Send GitHub slack message | |
id: slack | |
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1 | |
with: | |
errors: true | |
method: chat.postMessage | |
token: ${{ secrets.SLACK_BOT_TOKEN }} | |
payload: | | |
{ | |
"channel": "${{ secrets.SLACK_CHANNEL_ID_FOR_RELEASES }}", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": ${{ toJson(env.FINAL_CONTENT) }} | |
} | |
}, | |
{ "type": "divider" }, | |
{ | |
"type": "actions", | |
"elements": [ | |
{ | |
"type": "button", | |
"text": { | |
"type": "plain_text", | |
"text": "Open release PR" | |
}, | |
"url": "https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}" | |
} | |
] | |
} | |
] | |
} |