Back to Work
DevOps Template2026

Theme Launch

GitHub ActionsShopify CLICI/CDTheme CheckAutomation

A production-ready GitHub Actions pipeline template for Shopify theme development — automated linting, theme check, preview deployments, and zero-downtime production pushes.

The Challenge

Shopify theme development lacks standardized CI/CD practices. Most teams push directly to live themes via Shopify CLI, skip linting, have no preview environment workflow, and risk breaking production with every deployment. There's no 'Vercel for Shopify themes.'

The Solution

Created a reusable GitHub Actions workflow that automates the full Shopify theme lifecycle: PR previews on unpublished themes, automated Theme Check linting, Lighthouse performance gates, and atomic production deployments with instant rollback capability.

Design
Code
Result
.github/workflows/theme-deploy.ymlyaml
  1deploy-preview:  2  if: github.event_name == 'pull_request'  3  runs-on: ubuntu-latest  4  steps:  5    - uses: actions/checkout@v4  6  7    - name: Setup Shopify CLI  8      uses: shopify/cli-action@v1  9      with: 10        store: ${{ secrets.SHOPIFY_STORE }} 11        password: ${{ secrets.SHOPIFY_CLI_TOKEN }} 12 13    - name: Push to preview theme 14      id: preview 15      run: | 16        THEME_NAME="PR-${{ github.event.number }}" 17        THEME_ID=$(shopify theme list --json | \ 18          jq -r ".[] | select(.name==\"$THEME_NAME\") | .id") 19 20        if [ -z "$THEME_ID" ]; then 21          shopify theme push --unpublished --theme "$THEME_NAME" --json 22        else 23          shopify theme push --theme "$THEME_ID" --json 24        fi 25 26        PREVIEW_URL=$(shopify theme info --theme "$THEME_NAME" --json | \ 27          jq -r '.preview_url') 28        echo "url=$PREVIEW_URL" >> "$GITHUB_OUTPUT" 29 30    - name: Comment PR with preview link 31      uses: actions/github-script@v7 32      with: 33        script: | 34          github.rest.issues.createComment({ 35            issue_number: context.issue.number, 36            owner: context.repo.owner, 37            repo: context.repo.repo, 38            body: `🔍 Preview: ${{ steps.preview.outputs.url }}` 39          }) 40
Scroll to explore
Tech Stack
GitHub ActionsShopify CLITheme CheckLighthouse CIBashYAML

Interested in similar work?

Let's discuss how I can help bring your Shopify project to life.