Skip to content

Commit

Permalink
feat: No more default provider label (#42)
Browse files Browse the repository at this point in the history
Removed the concept of default provider label as it was confusing and easily caused runners to be left behind. For example, if the user had a typo in the label on the workflow side, the default provider would spin up and never start the job because the labels don't match.

BREAKING CHANGE: `GitHubRunners` no longer takes `defaultProviderLabel` and all workflows must always specify the label they need instead of just `self-hosted`
  • Loading branch information
kichik committed Jun 15, 2022
1 parent 2cb39e4 commit b80212f
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 65 deletions.
30 changes: 0 additions & 30 deletions API.md
Expand Up @@ -488,7 +488,6 @@ new GitHubRunners(
'runners',
{
providers: [myProvider],
defaultProviderLabel: 'my-codebuild',
}
);
```
Expand Down Expand Up @@ -574,7 +573,6 @@ Any object.
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunners.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunners.property.defaultProvider">defaultProvider</a></code> | <code><a href="#@cloudsnorkel/cdk-github-runners.IRunnerProvider">IRunnerProvider</a></code> | Default provider as set by {@link GitHubRunnersProps.defaultProviderLabel}. |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunners.property.props">props</a></code> | <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunnersProps">GitHubRunnersProps</a></code> | *No description.* |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunners.property.providers">providers</a></code> | <code><a href="#@cloudsnorkel/cdk-github-runners.IRunnerProvider">IRunnerProvider</a>[]</code> | Configured runner providers. |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunners.property.secrets">secrets</a></code> | <code><a href="#@cloudsnorkel/cdk-github-runners.Secrets">Secrets</a></code> | Secrets for GitHub communication including webhook secret and runner authentication. |
Expand All @@ -593,18 +591,6 @@ The tree node.

---

##### `defaultProvider`<sup>Required</sup> <a name="defaultProvider" id="@cloudsnorkel/cdk-github-runners.GitHubRunners.property.defaultProvider"></a>

```typescript
public readonly defaultProvider: IRunnerProvider;
```

- *Type:* <a href="#@cloudsnorkel/cdk-github-runners.IRunnerProvider">IRunnerProvider</a>

Default provider as set by {@link GitHubRunnersProps.defaultProviderLabel}.

---

##### `props`<sup>Required</sup> <a name="props" id="@cloudsnorkel/cdk-github-runners.GitHubRunners.property.props"></a>

```typescript
Expand Down Expand Up @@ -1351,26 +1337,10 @@ const gitHubRunnersProps: GitHubRunnersProps = { ... }

| **Name** | **Type** | **Description** |
| --- | --- | --- |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunnersProps.property.defaultProviderLabel">defaultProviderLabel</a></code> | <code>string</code> | Label of default provider in case the workflow job doesn't specify any known label. |
| <code><a href="#@cloudsnorkel/cdk-github-runners.GitHubRunnersProps.property.providers">providers</a></code> | <code><a href="#@cloudsnorkel/cdk-github-runners.IRunnerProvider">IRunnerProvider</a>[]</code> | List of runner providers to use. |

---

##### `defaultProviderLabel`<sup>Optional</sup> <a name="defaultProviderLabel" id="@cloudsnorkel/cdk-github-runners.GitHubRunnersProps.property.defaultProviderLabel"></a>

```typescript
public readonly defaultProviderLabel: string;
```

- *Type:* string
- *Default:* 'codebuild'

Label of default provider in case the workflow job doesn't specify any known label.

A provider with that label must be configured.

---

##### `providers`<sup>Optional</sup> <a name="providers" id="@cloudsnorkel/cdk-github-runners.GitHubRunnersProps.property.providers"></a>

```typescript
Expand Down
1 change: 0 additions & 1 deletion README.md
Expand Up @@ -126,7 +126,6 @@ new GitHubRunners(
'runners',
{
providers: [myProvider],
defaultProviderLabel: 'my-codebuild',
}
);

Expand Down
36 changes: 2 additions & 34 deletions src/runner.ts
Expand Up @@ -14,14 +14,6 @@ import { GithubWebhookHandler } from './webhook';
* Properties for GitHubRunners
*/
export interface GitHubRunnersProps {

/**
* Label of default provider in case the workflow job doesn't specify any known label. A provider with that label must be configured.
*
* @default 'codebuild'
*/
readonly defaultProviderLabel?: string;

/**
* List of runner providers to use. At least one provider is required. Provider will be selected when its label matches the labels requested by the workflow job.
*
Expand Down Expand Up @@ -66,7 +58,6 @@ export interface GitHubRunnersProps {
* 'runners',
* {
* providers: [myProvider],
* defaultProviderLabel: 'my-codebuild',
* }
* );
* ```
Expand All @@ -78,11 +69,6 @@ export class GitHubRunners extends Construct {
*/
readonly providers: IRunnerProvider[];

/**
* Default provider as set by {@link GitHubRunnersProps.defaultProviderLabel}.
*/
readonly defaultProvider: IRunnerProvider;

/**
* Secrets for GitHub communication including webhook secret and runner authentication.
*/
Expand All @@ -107,13 +93,6 @@ export class GitHubRunners extends Construct {
];
}

const defaultProvider = this.getDefaultProvider();
if (!defaultProvider) {
throw new Error(`No provider was found for the default label "${this.props.defaultProviderLabel}"`);
} else {
this.defaultProvider = defaultProvider;
}

this.orchestrator = this.stateMachine();
this.webhook = new GithubWebhookHandler(this, 'Webhook Handler', {
orchestrator: this.orchestrator,
Expand All @@ -124,16 +103,6 @@ export class GitHubRunners extends Construct {
this.statusFunction();
}

private getDefaultProvider(): IRunnerProvider | null {
for (const provider of this.providers) {
if ((this.props.defaultProviderLabel || 'codebuild') == provider.label) {
return provider;
}
}

return null;
}

private stateMachine() {
const tokenRetrieverTask = new stepfunctions_tasks.LambdaInvoke(
this,
Expand Down Expand Up @@ -177,11 +146,10 @@ export class GitHubRunners extends Construct {
stepfunctions.Condition.isPresent(`$.labels.${provider.label}`),
providerTask,
);
if (this.defaultProvider == provider) {
providerChooser.otherwise(providerTask);
}
}

providerChooser.otherwise(new stepfunctions.Fail(this, 'Unknown label'));

const work = tokenRetrieverTask.next(
new stepfunctions.Parallel(this, 'Error Catcher', { resultPath: '$.result' })
.branch(providerChooser)
Expand Down

0 comments on commit b80212f

Please sign in to comment.