ci: Request GitHub token for proper repository (#43940)

Release Notes:

- N/A
This commit is contained in:
Finn Evers
2025-12-01 21:30:51 +01:00
committed by GitHub
parent ff6bd7d82e
commit 7881551dda
7 changed files with 41 additions and 9 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ jobs:
mkdir -p /tmp/ext-output
./zed-extension --source-dir . --scratch-dir /tmp/ext-scratch --output-dir /tmp/ext-output
shell: bash -euxo pipefail {0}
timeout-minutes: 1
timeout-minutes: 2
check_bump_needed:
if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
runs-on: namespace-profile-2x4-ubuntu-2404
+2
View File
@@ -21,6 +21,8 @@ jobs:
with:
app-id: ${{ secrets.app-id }}
private-key: ${{ secrets.app-secret }}
owner: zed-industries
repositories: extensions
- name: steps::checkout_repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
+1 -1
View File
@@ -108,7 +108,7 @@ jobs:
mkdir -p /tmp/ext-output
./zed-extension --source-dir . --scratch-dir /tmp/ext-scratch --output-dir /tmp/ext-output
shell: bash -euxo pipefail {0}
timeout-minutes: 1
timeout-minutes: 2
tests_pass:
needs:
- orchestrate
@@ -5,7 +5,9 @@ use crate::tasks::workflows::{
extension_release::extension_workflow_secrets,
extension_tests::{self},
runners,
steps::{self, CommonJobConditions, DEFAULT_REPOSITORY_OWNER_GUARD, NamedJob, named},
steps::{
self, CommonJobConditions, DEFAULT_REPOSITORY_OWNER_GUARD, FluentBuilder, NamedJob, named,
},
vars::{
JobOutput, StepOutput, WorkflowInput, WorkflowSecret, one_workflow_per_non_main_branch,
},
@@ -113,7 +115,7 @@ fn create_version_label(
app_id: &WorkflowSecret,
app_secret: &WorkflowSecret,
) -> NamedJob {
let (generate_token, generated_token) = generate_token(app_id, app_secret);
let (generate_token, generated_token) = generate_token(app_id, app_secret, None);
let job = steps::dependant_job(dependencies)
.cond(Expression::new(format!(
"{DEFAULT_REPOSITORY_OWNER_GUARD} && github.event_name == 'push' && github.ref == 'refs/heads/main' && {} == 'false'",
@@ -193,7 +195,7 @@ fn bump_extension_version(
app_id: &WorkflowSecret,
app_secret: &WorkflowSecret,
) -> NamedJob {
let (generate_token, generated_token) = generate_token(app_id, app_secret);
let (generate_token, generated_token) = generate_token(app_id, app_secret, None);
let (bump_version, new_version) = bump_version(current_version, bump_type);
let job = steps::dependant_job(dependencies)
@@ -216,13 +218,24 @@ fn bump_extension_version(
pub(crate) fn generate_token(
app_id: &WorkflowSecret,
app_secret: &WorkflowSecret,
repository_target: Option<RepositoryTarget>,
) -> (Step<Use>, StepOutput) {
let step = named::uses("actions", "create-github-app-token", "v2")
.id("generate-token")
.add_with(
Input::default()
.add("app-id", app_id.to_string())
.add("private-key", app_secret.to_string()),
.add("private-key", app_secret.to_string())
.when_some(
repository_target,
|input,
RepositoryTarget {
owner,
repositories,
}| {
input.add("owner", owner).add("repositories", repositories)
},
),
);
let generated_token = StepOutput::new(&step, "token");
@@ -288,3 +301,17 @@ fn create_pull_request(new_version: StepOutput, generated_token: StepOutput) ->
.add("sign-commits", true),
)
}
pub(crate) struct RepositoryTarget {
owner: String,
repositories: String,
}
impl RepositoryTarget {
pub fn new<T: ToString>(owner: T, repositories: &[&str]) -> Self {
Self {
owner: owner.to_string(),
repositories: repositories.join("\n"),
}
}
}
@@ -2,7 +2,7 @@ use gh_workflow::{Event, Job, Run, Step, Use, Workflow, WorkflowCall};
use indoc::indoc;
use crate::tasks::workflows::{
extension_bump::generate_token,
extension_bump::{RepositoryTarget, generate_token},
runners,
steps::{CommonJobConditions, NamedJob, checkout_repo, named},
vars::{StepOutput, WorkflowSecret},
@@ -26,7 +26,9 @@ pub(crate) fn extension_release() -> Workflow {
}
fn create_release(app_id: &WorkflowSecret, app_secret: &WorkflowSecret) -> NamedJob {
let (generate_token, generated_token) = generate_token(&app_id, &app_secret);
let extension_registry = RepositoryTarget::new("zed-industries", &["extensions"]);
let (generate_token, generated_token) =
generate_token(&app_id, &app_secret, Some(extension_registry));
let (get_extension_id, extension_id) = get_extension_id();
let job = Job::default()
@@ -82,7 +82,7 @@ pub(crate) fn check_extension() -> NamedJob {
let job = Job::default()
.with_repository_owner_guard()
.runs_on(runners::LINUX_SMALL)
.timeout_minutes(1u32)
.timeout_minutes(2u32)
.add_step(steps::checkout_repo())
.add_step(cache_download)
.add_step(download_zed_extension_cli(cache_hit))
@@ -180,6 +180,7 @@ pub(crate) fn dependant_job(deps: &[&NamedJob]) -> Job {
impl FluentBuilder for Job {}
impl FluentBuilder for Workflow {}
impl FluentBuilder for Input {}
/// A helper trait for building complex objects with imperative conditionals in a fluent style.
/// Copied from GPUI to avoid adding GPUI as dependency