git » chasquid » next » tree

[next] / .github / workflows / docker.yml

name: "docker"

on:
  push:
    branches: [ "main", "next" ]
    tags: [ "v*", "test-tag-*" ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ "main", "next" ]
  schedule:
    - cron: '29 21 * * 6'

env:
  HAS_DOCKER: ${{ secrets.DOCKER_REGISTRY_USER != '' }}
  HAS_GITLAB: ${{ secrets.GITLAB_REGISTRY_USER != '' }}

jobs:
  integration:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v4
      - name: Docker info (for debugging)
        run: docker info
      - name: Build test image
        run: docker build -t chasquid-test -f test/Dockerfile .
      - name: Run tests
        run: docker run --name test1 chasquid-test  make test

  coverage:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: ">=1.20"
      - name: Install goveralls
        run: go install github.com/mattn/goveralls@latest
      - name: Docker info (for debugging)
        run: docker info
      - name: Build test image
        run: docker build -t chasquid-test -f test/Dockerfile .
      - name: Run coverage tests
        run: docker run --name test1 chasquid-test  test/cover.sh
      - name: Extract coverage results
        run: >
          docker cp
          test1:/go/src/blitiri.com.ar/go/chasquid/.coverage/final.out
          .
      - name: Upload coverage results
        run: >
          goveralls
          -coverprofile=final.out
          -repotoken=${{ secrets.COVERALLS_TOKEN }}

  public-image:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    needs: [integration, coverage]
    if: github.event_name == 'push'
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: docker build -t chasquid -f docker/Dockerfile .

      # Push it to Dockerhub.
      - name: Dockerhub login
        if: env.HAS_DOCKER
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_REGISTRY_USER }}
          password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
      - name: Dockerhub push
        if: env.HAS_DOCKER
        run: |
          docker tag chasquid index.docker.io/${{ secrets.DOCKER_REGISTRY_USER }}/chasquid:$GITHUB_REF_NAME
          docker push index.docker.io/${{ secrets.DOCKER_REGISTRY_USER }}/chasquid:$GITHUB_REF_NAME
      - name: Dockerhub tag latest
        if: env.HAS_DOCKER && github.ref_name == 'main'
        run: |
          docker tag chasquid index.docker.io/${{ secrets.DOCKER_REGISTRY_USER }}/chasquid:latest
          docker push index.docker.io/${{ secrets.DOCKER_REGISTRY_USER }}/chasquid:latest

      # Push it to Gitlab.
      - name: Gitlab login
        if: env.HAS_GITLAB
        uses: docker/login-action@v3
        with:
          registry: registry.gitlab.com
          username: ${{ secrets.GITLAB_REGISTRY_USER }}
          password: ${{ secrets.GITLAB_REGISTRY_TOKEN }}
      - name: Gitlab push
        if: env.HAS_GITLAB
        run: |
          docker tag chasquid registry.gitlab.com/albertito/chasquid:$GITHUB_REF_NAME
          docker push registry.gitlab.com/albertito/chasquid:$GITHUB_REF_NAME
      - name: Gitlab tag latest
        if: env.HAS_GITLAB && github.ref_name == 'main'
        run: |
          docker tag chasquid registry.gitlab.com/albertito/chasquid:latest
          docker push registry.gitlab.com/albertito/chasquid:latest