CI/CD Integration

Automate your app store metadata updates and releases using GitHub Actions, GitLab CI, or other CI/CD systems.

Overview

Integrating AppStore Copilot into your CI/CD pipeline allows you to:

  • Automatically translate metadata when updating your source language
  • Push metadata changes alongside code releases
  • Keep app store listings in sync with your codebase
  • Review metadata changes in pull requests

GitHub Actions

The easiest way to integrate is using our official GitHub Action:

.github/workflows/metadata.ymlyaml
name: Update App Store Metadata
on:
push:
branches: [main]
paths:
- 'metadata/**' # Trigger when metadata files change
jobs:
update-metadata:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install AppStore Copilot CLI
run: npm install -g @appstorecopilot/cli
- name: Select Project
run: asc projects use ${{ secrets.ASC_PROJECT_ID }}
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
- name: Translate Metadata
run: asc translate --from en-US --to es-ES,fr-FR,de-DE,ja-JP
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
- name: Push to App Store
run: asc push --store appstore
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
- name: Push to Play Store
run: asc push --store playstore
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}

Release Workflow

Here's a more comprehensive workflow that runs on release:

.github/workflows/release.ymlyaml
name: Release to App Stores
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install CLI
run: npm install -g @appstorecopilot/cli
- name: Select Project
run: asc projects use ${{ secrets.ASC_PROJECT_ID }}
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
# Update What's New with release notes
- name: Update Release Notes
run: |
asc metadata set --locale en-US --field whatsNew --value "${{ github.event.release.body }}"
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
# Translate What's New to all locales
- name: Translate Release Notes
run: asc translate --from en-US --to all --fields whatsNew
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
# Push to both stores
- name: Push Metadata
run: asc push --store both
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
# Submit for review (optional)
- name: Submit for Review
if: ${{ !contains(github.event.release.tag_name, 'beta') }}
run: asc publish --store both
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}

GitLab CI

.gitlab-ci.ymlyaml
stages:
- metadata
update-metadata:
stage: metadata
image: node:20
only:
changes:
- metadata/**
before_script:
- npm install -g @appstorecopilot/cli
script:
- asc projects use $ASC_PROJECT_ID
- asc translate --from en-US --to es-ES,fr-FR,de-DE
- asc push --store both
variables:
ASC_API_KEY: $ASC_API_KEY # Set in GitLab CI/CD Variables

PR Preview Comments

Add a preview comment to pull requests showing what metadata will change:

.github/workflows/pr-preview.ymlyaml
name: Metadata PR Preview
on:
pull_request:
paths:
- 'metadata/**'
jobs:
preview:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install CLI
run: npm install -g @appstorecopilot/cli
- name: Generate Preview
id: preview
run: |
asc projects use ${{ secrets.ASC_PROJECT_ID }}
PREVIEW=$(asc diff --json)
echo "preview<<EOF" >> $GITHUB_OUTPUT
echo "$PREVIEW" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
env:
ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const preview = `${{ steps.preview.outputs.preview }}`;
const body = `## 📱 App Store Metadata Preview
The following changes will be pushed to the stores:
\`\`\`json
${preview}
\`\`\`
`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
})

Best Practices

  1. Use secrets properly - Never commit API keys. Use your CI system's secret management.
  2. Trigger on specific paths - Only run metadata workflows when metadata files change.
  3. Preview before pushing - Use PR preview comments to review changes before merge.
  4. Separate translation from push - Run translation in a dedicated workflow to avoid rate limits.
  5. Use conditional publishing - Don't submit for review on beta releases.