Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
7a091f5
feat: report how the review base was built
Svilen-Stefanov Oct 7, 2026
74d36ce
fix: count merges as catch-up and never call an unknown base exact
Svilen-Stefanov Oct 7, 2026
6b46ac3
refactor: report the base analysis as reused, incremental or full
Svilen-Stefanov Oct 9, 2026
3ca8dc1
feat: catch up the review base from the nearest saved ancestor
Svilen-Stefanov Oct 9, 2026
7a65300
feat: save the diagram to an analysis branch of its own
Svilen-Stefanov Oct 9, 2026
608b37d
feat: name sync inputs for what they do, and move base timings to tel…
ivanmilevtues Oct 10, 2026
1fb65b1
refactor: split the review into baseline and head steps, and analyze …
ivanmilevtues Oct 10, 2026
17cd1e8
ci: run review and sync from one CodeBoarding workflow
ivanmilevtues Oct 10, 2026
1560c90
fix: keep analysis credentials for the review's second analysis step
ivanmilevtues Oct 10, 2026
7776d20
fix: let sync read the analyses reviews save
ivanmilevtues Oct 10, 2026
6597352
feat: keep the analysis on codeboarding_analysis_branch, and fail ins…
ivanmilevtues Oct 10, 2026
c4820ee
fix: name the branch the run is on when target_branch points elsewhere
ivanmilevtues Oct 10, 2026
381a0c4
feat: choose where the analysis lives, and keep one branch's analysis…
ivanmilevtues Oct 11, 2026
08d55da
feat: keep each branch's analysis on an analysis branch named after it
ivanmilevtues Oct 11, 2026
5328269
style: black-format test_baseline_branch.py
ivanmilevtues Oct 11, 2026
f1ebc0c
fix: keep one codeboarding/baseline for the default branch, and save …
ivanmilevtues Oct 11, 2026
4a9e3f4
style: black-format test_baseline_branch.py
ivanmilevtues Oct 11, 2026
ee4a205
docs: set up CodeBoarding as one workflow file
ivanmilevtues Oct 11, 2026
226c68f
style: spell out the merge-base retry for shellcheck SC2015
ivanmilevtues Oct 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions .github/actions/app-token/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: 'CodeBoarding App token'
description: >-
Mints a CodeBoarding GitHub App token so comments and baseline commits appear as
codeboarding-review[bot] (the App avatar is the CodeBoarding logo) instead of
github-actions[bot]. Fails open: with App credentials absent or invalid, `token`
is empty and the caller falls back to github.token. End-user repositories cannot
reuse this, since the App private key is never shipped to their runners.
inputs:
client_id:
description: 'vars.CODEBOARDING_APP_CLIENT_ID'
required: false
default: ''
app_id:
description: 'vars.CODEBOARDING_APP_ID'
required: false
default: ''
private_key:
description: 'secrets.CODEBOARDING_APP_PRIVATE_KEY'
required: false
default: ''
outputs:
token:
description: 'The App installation token, or empty.'
value: ${{ steps.client.outputs.token || steps.app.outputs.token }}
runs:
using: 'composite'
steps:
- name: Detect CodeBoarding GitHub App credentials
id: config
shell: bash
env:
CLIENT_ID: ${{ inputs.client_id }}
APP_ID: ${{ inputs.app_id }}
PRIVATE_KEY: ${{ inputs.private_key }}
run: |
client_id="${CLIENT_ID:-}"
app_id="${APP_ID:-}"

# GitHub App client IDs start with "Iv". If that value was stored in
# CODEBOARDING_APP_ID, use it as a client ID to avoid the deprecated
# app-id input path.
if [ -z "$client_id" ] && [ "${app_id#Iv}" != "$app_id" ]; then
client_id="$app_id"
app_id=""
fi

private_key_valid=false
if [ -n "$PRIVATE_KEY" ]; then
if printf '%s' "$PRIVATE_KEY" | openssl pkey -noout >/dev/null 2>&1; then
private_key_valid=true
else
echo "::warning::CODEBOARDING_APP_PRIVATE_KEY is not a valid PEM private key, so CodeBoarding will fall back to github-actions[bot]."
if printf '%b' "$PRIVATE_KEY" | openssl pkey -noout >/dev/null 2>&1; then
printf '%s\n' "::warning::CODEBOARDING_APP_PRIVATE_KEY looks like it contains literal \\n escapes. Store the downloaded PEM as multi-line secret text instead."
fi
fi
fi

{
[ -n "$client_id" ] && echo "has_client_id=true" || echo "has_client_id=false"
[ -n "$app_id" ] && echo "has_app_id=true" || echo "has_app_id=false"
echo "client_id=$client_id"
echo "private_key_valid=$private_key_valid"
} >> "$GITHUB_OUTPUT"
- uses: actions/create-github-app-token@v3
id: client
if: steps.config.outputs.has_client_id == 'true' && steps.config.outputs.private_key_valid == 'true'
continue-on-error: true
with:
client-id: ${{ steps.config.outputs.client_id }}
private-key: ${{ inputs.private_key }}
- uses: actions/create-github-app-token@v3
id: app
if: steps.config.outputs.has_client_id != 'true' && steps.config.outputs.has_app_id == 'true' && steps.config.outputs.private_key_valid == 'true'
continue-on-error: true
with:
app-id: ${{ inputs.app_id }}
private-key: ${{ inputs.private_key }}
- name: Warn when CodeBoarding App token is unavailable
if: steps.client.outputs.token == '' && steps.app.outputs.token == ''
shell: bash
run: |
echo "::warning::CodeBoarding GitHub App token is unavailable; falling back to github-actions[bot]. Check CODEBOARDING_APP_PRIVATE_KEY formatting if app credentials are configured."
152 changes: 0 additions & 152 deletions .github/workflows/codeboarding-sync.yml

This file was deleted.

Loading
Loading