Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds workflows for preview environment creation and deletion #2

Merged
merged 7 commits into from
Nov 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/preview-create.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Create Preview Environment

on:
workflow_call:
inputs:
ref:
type: string
description: The fully-formed ref of the branch or tag that triggered the workflow run.
image:
type: string
default: skpr/preview:2.x
description: Image to use for this workflow.
region:
type: string
default: ap-southeast-2
description: Region which this preview infrastructure resides.
eks_cluster_name:
type: string
description: Name of the EKS cluster which this preview environment resides.
k8s_namespace:
type: string
description: Name of the Kubernetes namespace which this preview environment resides.
domain:
type: string
description: Domain which these preview environments reside on.
post_deploy_command:
type: string
description: Command which will be executed after the environment is created.
secrets:
skpr_preview_registry_url:
required: true
skpr_preview_username:
required: true
skpr_preview_password:
required: true
outputs:
version:
description: The preview environment name
value: ${{ jobs.create.outputs.preview-name }}
url:
description: The URL of the preview environment
value: ${{ jobs.create.outputs.preview-domain }}

env:
AWS_REGION: ${{ inputs.region }}
SKPR_PREVIEW_CLUSTER_NAME: ${{ inputs.eks_cluster_name }}
SKPR_PREVIEW_NAMESPACE: ${{ inputs.k8s_namespace }}
SKPR_PREVIEW_REGISTRY_URL: ${{ secrets.SKPR_PREVIEW_REGISTRY_URL }}
SKPR_PREVIEW_REGISTRY_USERNAME: ${{ secrets.SKPR_PREVIEW_USERNAME }}
SKPR_PREVIEW_REGISTRY_PASSWORD: ${{ secrets.SKPR_PREVIEW_PASSWORD }}
AWS_ACCESS_KEY_ID: ${{ secrets.SKPR_PREVIEW_USERNAME }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SKPR_PREVIEW_PASSWORD }}

jobs:
create:
name: Create Preview Environment
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
container:
image: ${{ inputs.image }}
outputs:
preview-name: ${{ steps.info.outputs.preview_name }}
preview-domain: ${{ steps.info.outputs.preview_domain }}
steps:
- name: ⬇️ Checkout Code
uses: actions/checkout@v3
- name: ℹ️ Get Preview Environment Information
id: info
run: |
PREVIEW_NAME=${{ inputs.ref }}
PREVIEW_NAME=$(echo $PREVIEW_NAME | sed -r 's/[^a-zA-Z0-9-]//g' | tr '[:upper:]' '[:lower:]')
PREVIEW_DOMAIN=${PREVIEW_NAME}.${{ inputs.domain }}
echo "preview_name=$PREVIEW_NAME" >> $GITHUB_OUTPUT
echo "preview_domain=$PREVIEW_DOMAIN" >> $GITHUB_OUTPUT
- name: 🚀 Create Preview Environment
run: |
skpr-preview create ${{ steps.info.outputs.preview_name }} ${{ steps.info.outputs.preview_domain }}
- name: 🧹 Execute Post Creation Commands
timeout-minutes: 30
run: |
skpr-preview exec ${{ steps.info.outputs.preview_name }} -- ${{ inputs.post_deploy_command }}
59 changes: 59 additions & 0 deletions .github/workflows/preview-delete.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Delete Preview Environment

on:
workflow_call:
inputs:
ref:
type: string
description: The fully-formed ref of the branch or tag that triggered the workflow run.
image:
type: string
default: skpr/preview:2.x
description: Image to use for this workflow.
region:
type: string
default: ap-southeast-2
description: Region which this preview infrastructure resides.
eks_cluster_name:
type: string
description: Name of the EKS cluster which this preview environment resides.
k8s_namespace:
type: string
description: Name of the Kubernetes namespace which this preview environment resides.
secrets:
skpr_preview_username:
required: true
skpr_preview_password:
required: true
outputs:
version:
description: The preview environment name
value: ${{ jobs.delete.outputs.preview-name }}

env:
AWS_REGION: ${{ inputs.region }}
SKPR_PREVIEW_CLUSTER_NAME: ${{ inputs.eks_cluster_name }}
SKPR_PREVIEW_NAMESPACE: ${{ inputs.k8s_namespace }}
AWS_ACCESS_KEY_ID: ${{ secrets.SKPR_PREVIEW_USERNAME }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SKPR_PREVIEW_PASSWORD }}

jobs:
delete:
name: Delete Preview Environment
runs-on: ubuntu-latest
container:
image: ${{ inputs.image }}
outputs:
preview-name: ${{ steps.info.outputs.preview_name }}
steps:
- name: ⬇️ Checkout Code
uses: actions/checkout@v3
- name: ℹ️ Get Preview Environment Information
id: info
run: |
PREVIEW_NAME=${{ inputs.ref }}
PREVIEW_NAME=$(echo $PREVIEW_NAME | sed -r 's/[^a-zA-Z0-9-]//g' | tr '[:upper:]' '[:lower:]')
echo "preview_name=$PREVIEW_NAME" >> $GITHUB_OUTPUT
- name: 🧹 Delete Preview Environment
run: |
skpr-preview delete ${{ steps.info.outputs.preview_name }}
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
# gh-workflows
# GitHub Actions Workflows

This repository contains GitHub Action workflows to make it easy to automate your development pipeline.

## Usage

Example use below, see documentation for more [details](#documentation) on each workflow.

```yaml
jobs:
my_job:
uses: skpr/gh-workflow/.github/workflows/workflow_file.yml@main
with:
input_a: abc
input_b: def
```

## Documentation

* [Preview Environment](/docs/preview.md) - Create preview environments as part of a pull request workflow.
76 changes: 76 additions & 0 deletions docs/preview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Preview Environment

The following document outlines our Github Workflows which faciliate a preview environment deployment pipeline.

## Required Secrets

The following are secrets which are provided by a Skpr platform team member.

* SKPR_PREVIEW_REGISTRY_URL
* SKPR_PREVIEW_REGISTRY_USERNAME
* SKPR_PREVIEW_REGISTRY_PASSWORD

## Examples

### Create Preview Environment

Creates a preview environment as part of a pull request workflow.

This workflow will:

* Package the application using the same approach as `skpr package`.
* Deploy the application onto Preview environment infrastructure.
* Execute post deploy commands after the preview environment is deployed.

```yaml
name: Create Preview Environment

on:
pull_request:
types: [ synchronize, opened, reopened, ready_for_review ]

concurrency:
group: preview-${{ github.head_ref }}
cancel-in-progress: true

jobs:
deploy:
uses: skpr/gh-workflows/.github/workflows/preview-create.yml@main
secrets:
skpr_preview_registry_url: ${{ secrets.SKPR_PREVIEW_REGISTRY_URL }}
skpr_preview_username: ${{ secrets.SKPR_PREVIEW_USERNAME }}
skpr_preview_password: ${{ secrets.SKPR_PREVIEW_PASSWORD }}
with:
ref: ${{ github.event.pull_request.head.ref }}
eks_cluster_name: NEEDS TO BE CONFIGURED
k8s_namespace: NEEDS TO BE CONFIGURED
domain: NEEDS TO BE CONFIGURED
post_deploy_command: drush deploy
```

### Delete Preview Environment

Deletes a preview environment when a pull request is closed or moved to a draft state.

```yaml
name: Delete Preview Environment

on:
pull_request:
types: [ closed, converted_to_draft ]

concurrency:
group: preview-${{ github.head_ref }}
cancel-in-progress: true

jobs:
deploy:
uses: skpr/gh-workflows/.github/workflows/preview-delete.yml@main
secrets:
skpr_preview_username: ${{ secrets.SKPR_PREVIEW_USERNAME }}
skpr_preview_password: ${{ secrets.SKPR_PREVIEW_PASSWORD }}
with:
ref: ${{ github.event.pull_request.head.ref }}
eks_cluster_name: NEEDS TO BE CONFIGURED
k8s_namespace: NEEDS TO BE CONFIGURED
```