support reviewers, prevent_self_review and wait_timer

Signed-off-by: Raghunandan Balachandran <raghunandan@spotify.com>
This commit is contained in:
Raghunandan Balachandran
2024-09-12 11:52:59 +02:00
parent 60311a67b5
commit ce0d10cb48
4 changed files with 374 additions and 0 deletions
@@ -302,4 +302,61 @@ export const examples: TemplateExample[] = [
],
}),
},
{
description: 'Create a GitHub Environment with Wait Timer',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
wait_timer: 1000,
},
},
],
}),
},
{
description: 'Create a GitHub Environment with Prevent Self Review',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
prevent_self_review: true,
},
},
],
}),
},
{
description: 'Create a GitHub Environment with Reviewers',
example: yaml.stringify({
steps: [
{
action: 'github:environment:create',
name: 'Create Environment',
input: {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
reviewers: [
{
Type: 'User',
ID: 1,
},
{
Type: 'Team',
ID: 2,
},
],
},
},
],
}),
},
];
@@ -95,6 +95,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
@@ -128,6 +131,9 @@ describe('github:environment:create examples', () => {
protected_branches: true,
custom_branch_policies: false,
},
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -162,6 +168,9 @@ describe('github:environment:create examples', () => {
protected_branches: false,
custom_branch_policies: true,
},
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -208,6 +217,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -280,6 +292,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -331,6 +346,9 @@ describe('github:environment:create examples', () => {
custom_branch_policies: true,
protected_branches: false,
},
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -382,6 +400,9 @@ describe('github:environment:create examples', () => {
custom_branch_policies: true,
protected_branches: false,
},
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -473,6 +494,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -503,6 +527,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -536,6 +563,9 @@ describe('github:environment:create examples', () => {
custom_branch_policies: true,
protected_branches: false,
},
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -593,6 +623,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -643,6 +676,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -697,6 +733,9 @@ describe('github:environment:create examples', () => {
custom_branch_policies: false,
protected_branches: true,
},
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -726,6 +765,9 @@ describe('github:environment:create examples', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: false,
});
expect(
@@ -782,4 +824,112 @@ describe('github:environment:create examples', () => {
secret_name: 'SECRET2',
});
});
it(`should ${examples[14].description}`, async () => {
const input = yaml.parse(examples[14].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 1000,
reviewers: null,
prevent_self_review: false,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.getEnvironmentPublicKey,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[15].description}`, async () => {
const input = yaml.parse(examples[15].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: null,
prevent_self_review: true,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.getEnvironmentPublicKey,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
it(`should ${examples[16].description}`, async () => {
const input = yaml.parse(examples[16].example).steps[0].input;
await action.handler({
...mockContext,
input,
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
reviewers: [
{
Type: 'User',
ID: 1,
},
{
Type: 'Team',
ID: 2,
},
],
prevent_self_review: false,
});
expect(
mockOctokit.rest.repos.createDeploymentBranchPolicy,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createEnvironmentVariable,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.getEnvironmentPublicKey,
).not.toHaveBeenCalled();
expect(
mockOctokit.rest.actions.createOrUpdateEnvironmentSecret,
).not.toHaveBeenCalled();
});
});
@@ -94,6 +94,9 @@ describe('github:environment:create', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
});
@@ -119,6 +122,9 @@ describe('github:environment:create', () => {
protected_branches: true,
custom_branch_policies: false,
},
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
});
@@ -145,6 +151,9 @@ describe('github:environment:create', () => {
protected_branches: false,
custom_branch_policies: true,
},
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
expect(
@@ -190,6 +199,9 @@ describe('github:environment:create', () => {
protected_branches: false,
custom_branch_policies: true,
},
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
expect(
@@ -231,6 +243,9 @@ describe('github:environment:create', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
expect(
@@ -277,6 +292,9 @@ describe('github:environment:create', () => {
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
expect(
@@ -316,4 +334,110 @@ describe('github:environment:create', () => {
environment_name: 'envname',
});
});
it('should work with wait_timer', async () => {
await action.handler({
...mockContext,
input: {
...mockContext.input,
wait_timer: 1000,
},
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
reviewers: null,
wait_timer: 1000,
prevent_self_review: false,
});
});
it('should work with prevent_self_review set to true', async () => {
await action.handler({
...mockContext,
input: {
...mockContext.input,
prevent_self_review: true,
},
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
reviewers: null,
wait_timer: 0,
prevent_self_review: true,
});
});
it('should work with prevent_self_review set to false', async () => {
await action.handler({
...mockContext,
input: {
...mockContext.input,
prevent_self_review: false,
},
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
reviewers: null,
wait_timer: 0,
prevent_self_review: false,
});
});
it('should work with reviewers', async () => {
await action.handler({
...mockContext,
input: {
...mockContext.input,
reviewers: [
{
Type: 'User',
ID: 1,
},
{
Type: 'Team',
ID: 2,
},
],
},
});
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repository',
environment_name: 'envname',
deployment_branch_policy: null,
wait_timer: 0,
prevent_self_review: false,
reviewers: [
{
Type: 'User',
ID: 1,
},
{
Type: 'Team',
ID: 2,
},
],
});
});
});
@@ -48,6 +48,9 @@ export function createGithubEnvironmentAction(options: {
environmentVariables?: { [key: string]: string };
secrets?: { [key: string]: string };
token?: string;
wait_timer?: number;
prevent_self_review?: boolean;
reviewers?: Array<{ type?: 'User' | 'Team'; id?: number }> | null;
}>({
id: 'github:environment:create',
description: 'Creates Deployment Environments',
@@ -120,6 +123,35 @@ export function createGithubEnvironmentAction(options: {
type: 'string',
description: 'The token to use for authorization to GitHub',
},
wait_timer: {
title: 'Wait Timer',
type: 'integer',
description:
'The time to wait before creating or updating the environment (in milliseconds)',
},
prevent_self_review: {
title: 'Prevent Self Review',
type: 'boolean',
description: 'Whether to prevent self-review for this environment',
},
reviewers: {
title: 'Reviewers',
type: 'array',
description: 'Reviewers for this environment',
items: {
type: 'object',
properties: {
type: {
title: 'Type',
type: 'string',
},
id: {
title: 'ID',
type: 'integer',
},
},
},
},
},
},
},
@@ -133,8 +165,16 @@ export function createGithubEnvironmentAction(options: {
environmentVariables,
secrets,
token: providedToken,
wait_timer,
prevent_self_review,
reviewers,
} = ctx.input;
// Wait for the specified time before creating or updating the environment
if (wait_timer) {
await new Promise(resolve => setTimeout(resolve, wait_timer));
}
const octokitOptions = await getOctokitOptions({
integrations,
token: providedToken,
@@ -158,6 +198,9 @@ export function createGithubEnvironmentAction(options: {
repo: repo,
environment_name: name,
deployment_branch_policy: deploymentBranchPolicy ?? null,
wait_timer: wait_timer ?? 0,
prevent_self_review: prevent_self_review ?? false,
reviewers: reviewers ?? null,
});
if (customBranchPolicyNames) {