Improve extension_bump workflow (#43612)

This extends the extension CI workflow to create a tag once the version
is bumped on main.

Release Notes:

- N/A
This commit is contained in:
Finn Evers
2025-11-27 00:39:18 +01:00
committed by GitHub
parent 54309f4a48
commit 8c355b5eee
2 changed files with 104 additions and 13 deletions

View File

@@ -31,11 +31,19 @@ pub(crate) fn extension_bump() -> Workflow {
WorkflowSecret::new("app-secret", "The app secret for the corresponding app ID");
let test_extension = extension_tests::check_extension();
let (check_bump_needed, needs_bump) = check_bump_needed();
let bump_version = bump_extension_version(
&[&test_extension, &check_bump_needed],
&bump_type,
needs_bump.as_job_output(&check_bump_needed),
let (check_bump_needed, needs_bump, current_version) = check_bump_needed();
let needs_bump = needs_bump.as_job_output(&check_bump_needed);
let current_version = current_version.as_job_output(&check_bump_needed);
let dependencies = [&test_extension, &check_bump_needed];
let bump_version =
bump_extension_version(&dependencies, &bump_type, &needs_bump, &app_id, &app_secret);
let create_label = create_version_label(
&dependencies,
&needs_bump,
&current_version,
&app_id,
&app_secret,
);
@@ -65,24 +73,74 @@ pub(crate) fn extension_bump() -> Workflow {
.add_job(test_extension.name, test_extension.job)
.add_job(check_bump_needed.name, check_bump_needed.job)
.add_job(bump_version.name, bump_version.job)
.add_job(create_label.name, create_label.job)
}
fn check_bump_needed() -> (NamedJob, StepOutput) {
let (compare_versions, version_changed) = compare_versions();
fn check_bump_needed() -> (NamedJob, StepOutput, StepOutput) {
let (compare_versions, version_changed, current_version) = compare_versions();
let job = Job::default()
.with_repository_owner_guard()
.outputs([(version_changed.name.to_owned(), version_changed.to_string())])
.outputs([
(version_changed.name.to_owned(), version_changed.to_string()),
(
current_version.name.to_string(),
current_version.to_string(),
),
])
.runs_on(runners::LINUX_SMALL)
.timeout_minutes(1u32)
.add_step(steps::checkout_repo().add_with(("fetch-depth", 10)))
.add_step(compare_versions);
(named::job(job), version_changed)
(named::job(job), version_changed, current_version)
}
fn create_version_label(
dependencies: &[&NamedJob],
needs_bump: &JobOutput,
current_version: &JobOutput,
app_id: &WorkflowSecret,
app_secret: &WorkflowSecret,
) -> NamedJob {
let (generate_token, generated_token) = generate_token(app_id, app_secret);
let job = steps::dependant_job(dependencies)
.cond(Expression::new(format!(
"{DEFAULT_REPOSITORY_OWNER_GUARD} && {} == 'false'",
needs_bump.expr(),
)))
.runs_on(runners::LINUX_LARGE)
.timeout_minutes(1u32)
.add_step(generate_token)
.add_step(steps::checkout_repo())
.add_step(create_version_tag(current_version, generated_token));
named::job(job)
}
fn create_version_tag(current_version: &JobOutput, generated_token: StepOutput) -> Step<Use> {
named::uses("actions", "github-script", "v7").with(
Input::default()
.add(
"script",
format!(
indoc! {r#"
github.rest.git.createRef({{
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'refs/tags/v{}',
sha: context.sha
}})"#
},
current_version
),
)
.add("github-token", generated_token.to_string()),
)
}
/// Compares the current and previous commit and checks whether versions changed inbetween.
fn compare_versions() -> (Step<Run>, StepOutput) {
fn compare_versions() -> (Step<Run>, StepOutput, StepOutput) {
let check_needs_bump = named::bash(format!(
indoc! {
r#"
@@ -96,6 +154,7 @@ fn compare_versions() -> (Step<Run>, StepOutput) {
echo "needs_bump=true" >> "$GITHUB_OUTPUT" || \
echo "needs_bump=false" >> "$GITHUB_OUTPUT"
echo "current_version=${{CURRENT_VERSION}}" >> "$GITHUB_OUTPUT"
"#
},
VERSION_CHECK, VERSION_CHECK
@@ -103,14 +162,15 @@ fn compare_versions() -> (Step<Run>, StepOutput) {
.id("compare-versions-check");
let needs_bump = StepOutput::new(&check_needs_bump, "needs_bump");
let current_version = StepOutput::new(&check_needs_bump, "current_version");
(check_needs_bump, needs_bump)
(check_needs_bump, needs_bump, current_version)
}
fn bump_extension_version(
dependencies: &[&NamedJob],
bump_type: &WorkflowInput,
needs_bump: JobOutput,
needs_bump: &JobOutput,
app_id: &WorkflowSecret,
app_secret: &WorkflowSecret,
) -> NamedJob {