-
Notifications
You must be signed in to change notification settings - Fork 929
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
Merged
Merged
Changes from 3 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
172e7b8
docs: add guide for CI/CD template testing
matifali c391303
Update manifest to include testing templates guide
matifali 5569c9b
Enhance template testing with SSH command execution
matifali c01ec95
Apply suggestions from code review
matifali fe22341
Merge branch 'main' into atif/test-templates
matifali d82b10c
Update template testing workflow to ensure cleanup
matifali b3ec9aa
`make fmt`
matifali fa904b2
docs: update CLI instructions and link setup-coder
matifali File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
matifali marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# 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.md#roles). | ||
|
||
matifali marked this conversation as resolved.
Show resolved
Hide resolved
|
||
## 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/publish-template.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 }} test-${{ steps.name.outputs.version_name }} --yes | ||
matifali marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
- name: Run some example commands | ||
run: | | ||
coder config-ssh --yes | ||
# run some example commands | ||
coder ssh test-${{ steps.name.outputs.version_name }} -- make build | ||
|
||
- name: Promote template version | ||
if: success() | ||
run: | | ||
coder template version promote --template=$TEMPLATE_NAME --template-version=${{ steps.name.outputs.version_name }} --yes | ||
``` |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.