Theme Launch
A production-ready GitHub Actions pipeline template for Shopify theme development — automated linting, theme check, preview deployments, and zero-downtime production pushes.
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.'
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.
1deploy-preview:2 if: github.event_name == 'pull_request'3 runs-on: ubuntu-latest4 steps:5 - uses: actions/checkout@v467 - name: Setup Shopify CLI8 uses: shopify/cli-action@v19 with:10 store: ${{ secrets.SHOPIFY_STORE }}11 password: ${{ secrets.SHOPIFY_CLI_TOKEN }}1213 - name: Push to preview theme14 id: preview15 run: |16 THEME_NAME="PR-${{ github.event.number }}"17 THEME_ID=$(shopify theme list --json | \18 jq -r ".[] | select(.name==\"$THEME_NAME\") | .id")1920 if [ -z "$THEME_ID" ]; then21 shopify theme push --unpublished --theme "$THEME_NAME" --json22 else23 shopify theme push --theme "$THEME_ID" --json24 fi2526 PREVIEW_URL=$(shopify theme info --theme "$THEME_NAME" --json | \27 jq -r '.preview_url')28 echo "url=$PREVIEW_URL" >> "$GITHUB_OUTPUT"2930 - name: Comment PR with preview link31 uses: actions/github-script@v732 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
Interested in similar work?
Let's discuss how I can help bring your Shopify project to life.