> ## Documentation Index
> Fetch the complete documentation index at: https://www.qovery.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub Actions

> Deploy with GitHub Actions and Qovery CLI

Deploy your applications with GitHub Actions using the Qovery CLI.

## Prerequisites

Before you can deploy your application with GitHub Actions, you need to:

1. Install the [Qovery CLI](/cli/overview)
2. Generate a [Qovery API token](/configuration/organization/api-token) (via CLI or Console)
3. Set the environment variable `QOVERY_CLI_ACCESS_TOKEN` with your API token
4. Disable [Qovery Auto Deployment](/configuration/deployment/auto-deploy) on the services you want to deploy manually

## Deploy a Container Application

Here is an example of a GitHub Actions workflow file (`.github/workflows/deploy-with-qovery.yml`) to deploy a container application:

```yaml theme={null}
name: Deploy with Qovery

on:
  release:
    types: [published]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: myorg/myapp:${{ github.sha }}

      - name: Deploy with Qovery
        env:
          QOVERY_CLI_ACCESS_TOKEN: ${{ secrets.QOVERY_CLI_ACCESS_TOKEN }}
        run: |
          # Install Qovery CLI
          curl -s https://get.qovery.com | bash

          # Deploy application
          qovery application deploy \
            --organization "My Organization" \
            --project "My Project" \
            --environment "Production" \
            --application "myapp" \
            --commit-id ${{ github.sha }} \
            --watch
```

This workflow assumes you have:

* A container registry connected to Qovery
* An existing container application on Qovery
* Set the `QOVERY_CLI_ACCESS_TOKEN` secret in your GitHub repository

## Deploy a Single Application

Use the Qovery CLI to deploy a single application:

```bash theme={null}
qovery application deploy \
  --organization "My Organization" \
  --project "My Project" \
  --environment "Production" \
  --application "myapp" \
  --commit-id <commit-id> \
  --watch
```

## Deploy Multiple Applications

### Different Applications with Different Commits

```bash theme={null}
qovery application deploy \
  --organization "My Organization" \
  --project "My Project" \
  --environment "Production" \
  --application "app1" \
  --commit-id <commit-id-1> \
  --watch

qovery application deploy \
  --organization "My Organization" \
  --project "My Project" \
  --environment "Production" \
  --application "app2" \
  --commit-id <commit-id-2> \
  --watch
```

### Multiple Applications with the Same Commit (Monorepo)

```bash theme={null}
qovery application deploy \
  --organization "My Organization" \
  --project "My Project" \
  --environment "Production" \
  --applications "app1,app2,app3" \
  --commit-id <commit-id> \
  --watch
```

## Manage Preview Environments

### Clone an Environment

```bash theme={null}
qovery environment clone \
  --organization "My Organization" \
  --project "My Project" \
  --environment "Production" \
  --new-environment-name "preview-pr-123" \
  --cluster "my-cluster"
```

### Update Application Branch in Cloned Environment

```bash theme={null}
qovery application update \
  --organization "My Organization" \
  --project "My Project" \
  --environment "preview-pr-123" \
  --application "myapp" \
  --branch "feature-branch"
```

### Deploy the Preview Environment

```bash theme={null}
qovery application deploy \
  --organization "My Organization" \
  --project "My Project" \
  --environment "preview-pr-123" \
  --application "myapp" \
  --commit-id <commit-id> \
  --watch
```

### Delete Preview Environment

```bash theme={null}
qovery environment delete \
  --organization "My Organization" \
  --project "My Project" \
  --environment "preview-pr-123" \
  --yes
```

## Integration with Terraform

If you're using Terraform to manage your infrastructure, you can integrate it with your CI/CD pipeline. See the [Terraform Provider documentation](/using-qovery/interface/terraform-provider) for more information.

## Next Steps

<CardGroup cols={2}>
  <Card title="Qovery CLI" icon="terminal" href="/cli/overview">
    Learn more about Qovery CLI commands
  </Card>

  <Card title="API Token" icon="key" href="/configuration/organization/api-token">
    Generate and manage API tokens
  </Card>

  <Card title="Auto-Deploy" icon="rotate" href="/configuration/deployment/auto-deploy">
    Configure automatic deployments
  </Card>

  <Card title="GitLab CI" icon="https://mintcdn.com/qovery/Nvnl0g5BHzA0XQmy/images/logos/gitlab-icon.svg?fit=max&auto=format&n=Nvnl0g5BHzA0XQmy&q=85&s=7dbe862d57a8d223fd98d7182bb152de" href="/configuration/integrations/ci-cd/gitlab-ci" width="24" height="24" data-path="images/logos/gitlab-icon.svg">
    Deploy with GitLab CI/CD
  </Card>
</CardGroup>
