# CI/CD Integrations

You can use digger CLI within your CI/CD pipeline within your favourite tools such as Github Actions, CircliCI or TravicCI. Digger CLI dg can easily be used within your CI system to support your releasing. All you need is your digger token and AWS keys and then you can follow the system of your choise

# Github Actions

In the snippet bellow we show an example of a GitHub action which will release your service svc1 on push. You can see a full GH workflow example in our TODO example repository (opens new window)

name: Digger CI
on:
  push:
    branches: [master]

  build-push-release:
    runs-on: ubuntu-16.04
    needs:
      - get_tag_version
    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: eu-west-1

      - name: Set up Python 3.8
        uses: actions/setup-python@v2
        with:
          python-version: "3.8"

      - name: Build and push and release
        env:
          DIGGER_TOKEN: ${{ secrets.DIGGER_TOKEN }}
          DIGGER_AWS_KEY: ${{ secrets.DIGGER_AWS_KEY }}
          DIGGER_AWS_SECRET: ${{ secrets.DIGGER_AWS_SECRET }}
          BACKEND_ENDPOINT: "https://backend.digger.dev"
          WEBAPP_ENDPOINT: "https://app.digger.dev"
        run: |
          export TAG_VERSION=${{needs.get_tag_version.outputs.tag_version}}

          # Install diggercli
          pip install --upgrade git+https://github.com/diggerhq/cli@master

          echo "> Building docker image"
          dg env build stage --service svc1
          echo "> Pushing docker image to ECR"
          dg env push stage --service svc1 --aws-key "$DIGGER_AWS_KEY" --aws-secret "$DIGGER_AWS_SECRET"
          echo "> Releasing"
          dg env push release --service svc1 --aws-key "$DIGGER_AWS_KEY" --aws-secret "$DIGGER_AWS_SECRET"

# GitLab CI

In the snippet bellow we show an example of a GitLab ci. We are using the official docker image of digger to run digger commands. This comes with all dg dependencies included in the image

default:
  image: public.ecr.aws/g1x6q1x1/dg:v0.2.17

variables:
  # You need to configure the following variables as GitLab secrets
  # DIGGER_TOKEN: ${{DIGGER_TOKEN}}
  # DIGGER_AWS_KEY: ${{ secrets.DIGGER_AWS_KEY }}
  # DIGGER_AWS_SECRET: ${{ secrets.DIGGER_AWS_SECRET }}
  BACKEND_ENDPOINT: "https://backend.digger.dev"
  WEBAPP_ENDPOINT: "https://app.digger.dev"
  SERVICE: platform
  TAG_VERSION: $CI_COMMIT_SHORT_SHA
  # settings for docker-in-docker
  DOCKER_HOST: tcp://docker:2376
  DOCKER_TLS_CERTDIR: "/certs"
  DOCKER_TLS_VERIFY: 1
  DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"

# This is needed to allow docker-in-docker
services:
  - docker:19.03.12-dind

release-staging:
  stage: build
  variables:
    # This is the name of your environment
    DG_ENV: "staging"
  only:
    - develop
  script:
    - echo "> Building docker image"
    - dg env build "$DG_ENV" --service $SERVICE --tag $TAG_VERSION --context .
    - echo "> Pushing docker image to ECR"
    - dg env push "$DG_ENV" --service $SERVICE --tag $TAG_VERSION --aws-key "$DIGGER_AWS_KEY" --aws-secret "$DIGGER_AWS_SECRET"
    - echo "> Releasing docker image"
    - dg env release "$DG_ENV" --service $SERVICE --tag $TAG_VERSION --aws-key "$DIGGER_AWS_KEY" --aws-secret "$DIGGER_AWS_SECRET"