name: CI
env:
   POSTGRESQL_HOST: localhost
   POSTGRESQL_PORT: 5432
   POSTGRESQL_USR: postgres
   POSTGRESQL_PWD: root123
   POSTGRESQL_DATABASE: registry
   DOCKER_COMPOSE_VERSION: 2.27.1
   HARBOR_ADMIN: admin
   HARBOR_ADMIN_PASSWD: Harbor12345
   CORE_SECRET: tempString
   KEY_PATH: "/data/secret/keys/secretkey"
   REDIS_HOST: localhost
   REG_VERSION: v2.7.1-patch-2819-2553
   UI_BUILDER_VERSION: 1.6.0

on:
  # the paths-ignore is the same as the paths in pass-CI.yml, they should be synced together
  # see https://web.archive.org/web/20230506145443/https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/troubleshooting-required-status-checks#handling-skipped-but-required-checks
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'tests/**'
      - '!tests/**.sh'
      - '!tests/apitests/**'
      - '!tests/ci/**'
      - '!tests/resources/**'
      - '!tests/robot-cases/**'
      - '!tests/robot-cases/Group1-Nightly/**'      
  push:
    # the paths-ignore is the same as the paths in pass-CI.yml, they should be synced together
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'tests/**'
      - '!tests/**.sh'
      - '!tests/apitests/**'
      - '!tests/ci/**'
      - '!tests/resources/**'
      - '!tests/robot-cases/**'
      - '!tests/robot-cases/Group1-Nightly/**'

jobs:
  UTTEST:
    env:
       UTTEST: true
    runs-on:
      #- self-hosted
      - ubuntu-latest
    timeout-minutes: 100
    steps:
      - name: Set up Go 1.23
        uses: actions/setup-go@v5
        with:
           go-version: 1.23.2
        id: go
      - uses: actions/checkout@v5
        with:
         path: src/github.com/goharbor/harbor
      - name: setup env
        run: |
          cd src/github.com/goharbor/harbor
          pwd
          go env
          echo "GOPATH=$(go env GOPATH):$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
          echo "TOKEN_PRIVATE_KEY_PATH=${GITHUB_WORKSPACE}/src/github.com/goharbor/harbor/tests/private_key.pem" >> $GITHUB_ENV
        shell: bash
      - name: before_install
        run: |
          set -x
          cd src/github.com/goharbor/harbor
          pwd
          env
          #sudo apt install -y xvfb
          #xvfb-run ls
          curl -L https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
          chmod +x docker-compose
          sudo mv docker-compose /usr/local/bin
          IP=`hostname -I | awk '{print $1}'`
          echo '{"insecure-registries" : ["'$IP':5000"]}' | sudo tee /etc/docker/daemon.json
          echo "IP=$IP" >> $GITHUB_ENV
          sudo cp ./tests/harbor_ca.crt /usr/local/share/ca-certificates/
          sudo update-ca-certificates
          sudo service docker restart
      - name: install
        run: |
          cd src/github.com/goharbor/harbor
          env
          df -h
          bash ./tests/showtime.sh ./tests/ci/ut_install.sh
      - name: script
        run: |
          echo IP: $IP
          df -h
          cd src/github.com/goharbor/harbor
          bash ./tests/showtime.sh ./tests/ci/ut_run.sh $IP
          df -h
      - name: Codecov For BackEnd
        uses: codecov/codecov-action@v5
        with:
          files: ./src/github.com/goharbor/harbor/profile.cov
          flags: unittests

  APITEST_DB:
    env:
      APITEST_DB: true
    runs-on:
      #- self-hosted
      - ubuntu-latest
    timeout-minutes: 100
    steps:
      - name: Set up Go 1.23
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.2
        id: go
      - uses: actions/checkout@v5
        with:
          path: src/github.com/goharbor/harbor
      - name: setup env
        run: |
          cd src/github.com/goharbor/harbor
          pwd
          go env
          echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV
          echo "GOPATH=$(go env GOPATH):$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
          echo "TOKEN_PRIVATE_KEY_PATH=${GITHUB_WORKSPACE}/src/github.com/goharbor/harbor/tests/private_key.pem" >> $GITHUB_ENV
          IP=`hostname -I | awk '{print $1}'`
          echo "IP=$IP" >> $GITHUB_ENV
        shell: bash
      - name: before_install
        run: |
          set -x
          cd src/github.com/goharbor/harbor
          pwd
          env
          df -h
          #sudo apt install -y xvfb
          #xvfb-run ls
          curl -L https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
          chmod +x docker-compose
          sudo mv docker-compose /usr/local/bin
      - name: install
        run: |
          cd src/github.com/goharbor/harbor
          env
          df -h
          docker system prune -a -f
          bash ./tests/showtime.sh ./tests/ci/api_common_install.sh $IP DB
      - name: script
        run: |
          cd src/github.com/goharbor/harbor
          echo IP: $IP
          df -h
          bash ./tests/showtime.sh ./tests/ci/api_run.sh DB $IP
          df -h
      - name: upload_logs
        uses: actions/upload-artifact@v4
        with:
          name: db-api-harbor-logs.tar.gz
          path: /home/runner/work/harbor/harbor/src/github.com/goharbor/harbor/integration_logs.tar.gz
          retention-days: 5
  APITEST_DB_PROXY_CACHE:
    env:
      APITEST_DB: true
    runs-on:
      #- self-hosted
      - ubuntu-latest
    timeout-minutes: 100
    steps:
      - name: Set up Go 1.23
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.2
        id: go
      - uses: actions/checkout@v5
        with:
          path: src/github.com/goharbor/harbor
      - name: setup env
        run: |
          cd src/github.com/goharbor/harbor
          pwd
          go env
          echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV
          echo "GOPATH=$(go env GOPATH):$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
          echo "TOKEN_PRIVATE_KEY_PATH=${GITHUB_WORKSPACE}/src/github.com/goharbor/harbor/tests/private_key.pem" >> $GITHUB_ENV
          IP=`hostname -I | awk '{print $1}'`
          echo "IP=$IP" >> $GITHUB_ENV
        shell: bash
      - name: before_install
        run: |
          set -x
          cd src/github.com/goharbor/harbor
          pwd
          env
          df -h
          #sudo apt install -y xvfb
          #xvfb-run ls
          curl -L https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
          chmod +x docker-compose
          sudo mv docker-compose /usr/local/bin
      - name: install
        run: |
          cd src/github.com/goharbor/harbor
          env
          df -h
          docker system prune -a -f
          bash ./tests/showtime.sh ./tests/ci/api_common_install.sh $IP DB
      - name: script
        run: |
          cd src/github.com/goharbor/harbor
          echo IP: $IP
          df -h
          bash ./tests/showtime.sh ./tests/ci/api_run.sh PROXY_CACHE $IP
          df -h
      - name: upload_logs
        uses: actions/upload-artifact@v4
        with:
          name: proxy-api-harbor-logs.tar.gz
          path: /home/runner/work/harbor/harbor/src/github.com/goharbor/harbor/integration_logs.tar.gz
          retention-days: 5
  APITEST_LDAP:
    env:
      APITEST_LDAP: true
    runs-on:
      #- self-hosted
      - ubuntu-latest
    timeout-minutes: 100
    steps:
      - name: Set up Go 1.23
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.2
        id: go
      - uses: actions/checkout@v5
        with:
          path: src/github.com/goharbor/harbor
      - name: setup env
        run: |
          cd src/github.com/goharbor/harbor
          pwd
          go env
          echo "GOPATH=$(go env GOPATH):$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
          echo "TOKEN_PRIVATE_KEY_PATH=${GITHUB_WORKSPACE}/src/github.com/goharbor/harbor/tests/private_key.pem" >> $GITHUB_ENV
          IP=`hostname -I | awk '{print $1}'`
          echo "IP=$IP" >> $GITHUB_ENV
        shell: bash
      - name: before_install
        run: |
          set -x
          cd src/github.com/goharbor/harbor
          pwd
          env
          df -h
          #sudo apt install -y xvfb
          #xvfb-run ls
          curl -L https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
          chmod +x docker-compose
          sudo mv docker-compose /usr/local/bin
      - name: install
        run: |
          cd src/github.com/goharbor/harbor
          env
          df -h
          bash ./tests/showtime.sh ./tests/ci/api_common_install.sh $IP LDAP
      - name: script
        run: |
          echo IP: $IP
          df -h
          cd src/github.com/goharbor/harbor
          bash ./tests/showtime.sh ./tests/ci/api_run.sh LDAP $IP
          df -h
      - name: upload_logs
        uses: actions/upload-artifact@v4
        with:
          name: ldap-api-harbor-logs.tar.gz
          path: /home/runner/work/harbor/harbor/src/github.com/goharbor/harbor/integration_logs.tar.gz
          retention-days: 5
  OFFLINE:
    env:
      OFFLINE: true
    runs-on:
      #- self-hosted
      - ubuntu-latest
    timeout-minutes: 100
    steps:
      - name: Set up Go 1.23
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.2
        id: go
      - uses: actions/checkout@v5
        with:
          path: src/github.com/goharbor/harbor
      - name: setup env
        run: |
          cd src/github.com/goharbor/harbor
          pwd
          docker version
          go env
          echo "GOPATH=$(go env GOPATH):$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
          echo "TOKEN_PRIVATE_KEY_PATH=${GITHUB_WORKSPACE}/src/github.com/goharbor/harbor/tests/private_key.pem" >> $GITHUB_ENV
        shell: bash
      - name: before_install
        run: |
          set -x
          cd src/github.com/goharbor/harbor
          pwd
          env
          df -h
          #sudo apt install -y xvfb
          #xvfb-run ls
          curl -L https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
          chmod +x docker-compose
          sudo mv docker-compose /usr/local/bin
          IP=`hostname -I | awk '{print $1}'`
          echo '{"insecure-registries" : ["'$IP':5000"]}' | sudo tee /etc/docker/daemon.json
          echo "IP=$IP" >> $GITHUB_ENV
          sudo cp ./tests/harbor_ca.crt /usr/local/share/ca-certificates/
          sudo update-ca-certificates
          sudo service docker restart
      - name: script
        run: |
          echo IP: $IP
          df -h
          cd src/github.com/goharbor/harbor
          bash ./tests/showtime.sh ./tests/ci/distro_installer.sh
          df -h

  UI_UT:
    env:
      UI_UT: true
    runs-on:
      #- self-hosted
      - ubuntu-latest
    timeout-minutes: 100
    steps:
      - uses: actions/setup-node@v5
        with:
          node-version: '18'
      - uses: actions/checkout@v5
        with:
          path: src/github.com/goharbor/harbor
      - name: script
        run: |
          echo IP: $IP
          df -h
          cd src/github.com/goharbor/harbor
          bash ./tests/showtime.sh ./tests/ci/ui_ut_run.sh
          df -h
      - name: Codecov For UI
        uses: codecov/codecov-action@v5
        with:
          files: ./src/github.com/goharbor/harbor/src/portal/coverage/lcov.info
          flags: unittests