-
Notifications
You must be signed in to change notification settings - Fork 894
docs: add guide for CI/CD template testing #15528
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
Changes from 1 commit
172e7b8
c391303
5569c9b
c01ec95
fe22341
d82b10c
b3ec9aa
fa904b2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
Introduce a new tutorial outlining the process for testing and publishing Coder templates within a CI/CD pipeline using GitHub Actions. This guide includes prerequisites, a comprehensive workflow example, and detailed steps for template validation and deployment.
- Loading branch information
There are no files selected for viewing
matifali marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
# Testing and Publishing Coder Templates in CI/CD | ||
matifali marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
<div> | ||
<a href="https://github.com/matifali" style="text-decoration: none; color: inherit;"> | ||
<span style="vertical-align:middle;">Muhammad Atif Ali</span> | ||
<img src="https://github.com/matifali.png" width="24px" height="24px" style="vertical-align:middle; margin: 0px;"/> | ||
</a> | ||
</div> | ||
November 15, 2024 | ||
|
||
--- | ||
|
||
## Overview | ||
|
||
This guide demonstrates how to test and publish Coder templates in a Continuous | ||
Integration (CI) pipeline using the | ||
[coder/setup-action](https://github.com/coder/setup-coder). This workflow | ||
ensures your templates are validated, tested, and promoted seamlessly. | ||
|
||
## Prerequisites | ||
|
||
Before proceeding, ensure the following: | ||
|
||
- **Coder CLI** is installed and configured in your environment. | ||
- **Terraform CLI** is installed and available in your CI environment. | ||
- Access to your **Coder instance** with the appropriate | ||
[permissions](../admin/users/groups-roles#roles). | ||
|
||
## Example GitHub Action Workflow | ||
|
||
Below is an example workflow for testing and publishing a template using GitHub | ||
Actions. The workflow first validates the Terraform template, pushes the | ||
template to Coder without activating it, tests the template by creating a | ||
workspace, and then promotes the template version to active upon successful | ||
workspace creation. | ||
|
||
### Step-by-Step Process | ||
|
||
1. **Validate the Terraform template.** | ||
2. **Push the template to Coder without activating it.** | ||
3. **Test the template by creating a workspace.** | ||
4. **Promote the template version to active upon successful workspace | ||
creation.** | ||
matifali marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
### Workflow File | ||
|
||
Save the following workflow file as `.github/workflows/template-ci.yaml` in your | ||
repository: | ||
|
||
```yaml | ||
name: Test and Publish Coder Template | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
workflow_dispatch: | ||
|
||
jobs: | ||
test-and-publish: | ||
runs-on: ubuntu-latest | ||
env: | ||
TEMPLATE_NAME: "my-template" | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Set up Terraform | ||
uses: hashicorp/setup-terraform@v2 | ||
with: | ||
terraform_version: latest | ||
|
||
- name: Set up Coder CLI | ||
uses: coder/setup-action@v1 | ||
with: | ||
access_url: 'https://coder.example.com' | ||
coder_session_token: ${{ secrets.CODER_SESSION_TOKEN }} | ||
|
||
- name: Validate Terraform template | ||
run: terraform validate | ||
|
||
- name: Get short commit SHA to use as template version name | ||
id: name | ||
run: echo "version_name=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | ||
|
||
- name: Get latest commit title to use as template version description | ||
id: message | ||
run: echo "pr_title=$(git log --format=%s -n 1 ${{ github.sha }})" >> $GITHUB_OUTPUT | ||
|
||
- name: Push template to Coder | ||
run: | | ||
coder templates push $TEMPLATE_NAME --activate=false --name ${{ steps.name.outputs.version_name }} --message ${{ steps.message.outputs.pr_title }} --yes | ||
|
||
- name: Create a test workspace | ||
run: | | ||
coder create -t $TEMPLATE_NAME --template-version ${{ steps.name.outputs.version_name }} --yes | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we also show how to test if specific conditions work inside the template (e.g. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
||
- name: Promote template version | ||
if: success() | ||
run: | | ||
coder template version promote --template=$TEMPLATE_NAME --template-version=${{ steps.name.outputs.version_name }} --yes | ||
|
||
``` |
Uh oh!
There was an error while loading. Please reload this page.