ci: Request GitHub token for proper repository (#43940)
Release Notes: - N/A
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user