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 Metadataon:push:branches: [main]paths:- 'metadata/**' # Trigger when metadata files changejobs:update-metadata:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Setup Node.jsuses: actions/setup-node@v4with:node-version: '20'- name: Install AppStore Copilot CLIrun: npm install -g @appstorecopilot/cli- name: Select Projectrun: asc projects use ${{ secrets.ASC_PROJECT_ID }}env:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}- name: Translate Metadatarun: asc translate --from en-US --to es-ES,fr-FR,de-DE,ja-JPenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}- name: Push to App Storerun: asc push --store appstoreenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}- name: Push to Play Storerun: asc push --store playstoreenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
Repository Secrets
Store your ASC_API_KEY and ASC_PROJECT_ID as repository secrets. Never commit them to your codebase.
Go to Repository Settings → Secrets and variables → Actions → New repository secret.
Release Workflow
Here's a more comprehensive workflow that runs on release:
.github/workflows/release.ymlyaml
name: Release to App Storeson:release:types: [published]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Setup Node.jsuses: actions/setup-node@v4with:node-version: '20'- name: Install CLIrun: npm install -g @appstorecopilot/cli- name: Select Projectrun: 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 Notesrun: |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 Notesrun: asc translate --from en-US --to all --fields whatsNewenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}# Push to both stores- name: Push Metadatarun: asc push --store bothenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}# Submit for review (optional)- name: Submit for Reviewif: ${{ !contains(github.event.release.tag_name, 'beta') }}run: asc publish --store bothenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}
GitLab CI
.gitlab-ci.ymlyaml
stages:- metadataupdate-metadata:stage: metadataimage: node:20only:changes:- metadata/**before_script:- npm install -g @appstorecopilot/cliscript:- asc projects use $ASC_PROJECT_ID- asc translate --from en-US --to es-ES,fr-FR,de-DE- asc push --store bothvariables: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 Previewon:pull_request:paths:- 'metadata/**'jobs:preview:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Setup Node.jsuses: actions/setup-node@v4with:node-version: '20'- name: Install CLIrun: npm install -g @appstorecopilot/cli- name: Generate Previewid: previewrun: |asc projects use ${{ secrets.ASC_PROJECT_ID }}PREVIEW=$(asc diff --json)echo "preview<<EOF" >> $GITHUB_OUTPUTecho "$PREVIEW" >> $GITHUB_OUTPUTecho "EOF" >> $GITHUB_OUTPUTenv:ASC_API_KEY: ${{ secrets.ASC_API_KEY }}- name: Comment on PRuses: actions/github-script@v7with:script: |const preview = `${{ steps.preview.outputs.preview }}`;const body = `## 📱 App Store Metadata PreviewThe 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
- Use secrets properly - Never commit API keys. Use your CI system's secret management.
- Trigger on specific paths - Only run metadata workflows when metadata files change.
- Preview before pushing - Use PR preview comments to review changes before merge.
- Separate translation from push - Run translation in a dedicated workflow to avoid rate limits.
- Use conditional publishing - Don't submit for review on beta releases.
Need Help?
Check out our Common Workflows guide for more examples, or reach out to support.