mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
cba69f3d98
Refactor the workspace SSH command syntax across the project to use the "workspace.coder" format instead of "coder.workspace". This standardizes the SSH host entries for better consistency and clarity. This is a follow-up from #17445 and recommends using the suffix-based format for all new Coder versions. <img width="418" alt="image" src="https://github.com/user-attachments/assets/3893f840-9ce1-4803-a013-736068feb328" />
3.6 KiB
3.6 KiB
Test and Publish Coder Templates Through CI/CD
November 15, 2024Overview
This guide demonstrates how to test and publish Coder templates in a Continuous Integration (CI) pipeline using the coder/setup-action. This workflow ensures your templates are validated, tested, and promoted seamlessly.
Prerequisites
- Install and configure Coder CLI in your environment.
- Install Terraform CLI in your CI environment.
- Create a headless user with the user roles and permissions to manage templates and run workspaces.
Creating the headless user
coder users create \
--username machine-user \
--email machine-user@example.com \
--login-type none
coder tokens create --user machine-user --lifetime 8760h
# Copy the token and store it in a secret in your CI environment with the name `CODER_SESSION_TOKEN`
Example GitHub Action Workflow
This example workflow tests and publishes a template using GitHub Actions.
The workflow:
- Validates the Terraform template.
- Pushes the template to Coder without activating it.
- Tests the template by creating a workspace.
- Promotes the template version to active upon successful workspace creation.
Workflow File
Save the following workflow file as .github/workflows/publish-template.yaml in
your repository:
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 and run some example commands
run: |
coder create -t $TEMPLATE_NAME --template-version ${{ steps.name.outputs.version_name }} test-${{ steps.name.outputs.version_name }} --yes
# run some example commands
coder ssh test-${{ steps.name.outputs.version_name }} -- make build
- name: Delete the test workspace
if: always()
run: coder delete test-${{ steps.name.outputs.version_name }} --yes
- name: Promote template version
if: success()
run: |
coder template version promote --template=$TEMPLATE_NAME --template-version=${{ steps.name.outputs.version_name }} --yes