name: CI on: schedule: - cron: '0 5 * * *' # everyday at 5 am UTC push: branches: - master tags: - v[0-9]+.[0-9]+.[0-9]+ pull_request: jobs: build: name: Build runs-on: ubuntu-latest env: GOFLAGS: -mod=readonly services: postgres: image: postgres:10.8 ports: - 5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 mysql: image: mysql:5.7 env: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: dex ports: - 3306:3306 options: --health-cmd "mysql -proot -e \"show databases;\"" --health-interval 10s --health-timeout 5s --health-retries 5 etcd: image: gcr.io/etcd-development/etcd:v3.2.9 ports: - 2379 env: ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379 ETCD_ADVERTISE_CLIENT_URLS: http://0.0.0.0:2379 options: --health-cmd "ETCDCTL_API=3 etcdctl --endpoints http://localhost:2379 endpoint health" --health-interval 10s --health-timeout 5s --health-retries 5 keystone: image: openio/openstack-keystone:pike ports: - 5000 - 35357 options: --health-cmd "curl --fail http://localhost:5000/v3" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Set up Go uses: actions/setup-go@v1 with: go-version: 1.15 - name: Checkout code uses: actions/checkout@v2 - name: Run tests run: make testall env: DEX_FOO_USER_PASSWORD: $2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy DEX_MYSQL_DATABASE: dex DEX_MYSQL_USER: root DEX_MYSQL_PASSWORD: root DEX_MYSQL_HOST: 127.0.0.1 DEX_MYSQL_PORT: 3306 DEX_POSTGRES_DATABASE: postgres DEX_POSTGRES_USER: postgres DEX_POSTGRES_PASSWORD: postgres DEX_POSTGRES_HOST: localhost DEX_POSTGRES_PORT: ${{ job.services.postgres.ports[5432] }} DEX_ETCD_ENDPOINTS: http://localhost:${{ job.services.etcd.ports[2379] }} DEX_LDAP_TESTS: 1 DEX_KEYSTONE_URL: http://localhost:${{ job.services.keystone.ports[5000] }} DEX_KEYSTONE_ADMIN_URL: http://localhost:${{ job.services.keystone.ports[35357] }} DEX_KEYSTONE_ADMIN_USER: demo DEX_KEYSTONE_ADMIN_PASS: DEMO_PASS - name: Run linter run: make lint # Ensure proto generation doesn't depend on external packages. - name: Verify proto run: make verify-proto docker: name: Docker runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Calculate Docker image tags id: tags env: DOCKER_IMAGES: "ghcr.io/dexidp/dex dexidp/dex" run: | VERSION=noop if [[ "${{ github.event_name }}" == "schedule" ]]; then VERSION=nightly else case $GITHUB_REF in refs/tags/*) VERSION=${GITHUB_REF#refs/tags/};; refs/heads/*) VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g');; refs/pull/*) VERSION=pr-${{ github.event.number }};; *) VERSION=sha-${GITHUB_SHA::8};; esac fi TAGS=() for image in $DOCKER_IMAGES; do TAGS+=("${image}:${VERSION}") if [[ "${{ github.event.repository.default_branch }}" == "$VERSION" ]]; then TAGS+=("${image}:latest") fi done echo ::set-output name=version::${VERSION} echo ::set-output name=tags::$(IFS=,; echo "${TAGS[*]}") echo ::set-output name=commit_hash::${GITHUB_SHA::8} echo ::set-output name=build_date::$(git show -s --format=%cI) - name: Set up QEMU uses: docker/setup-qemu-action@v1 with: platforms: all - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 with: install: true version: latest # TODO: Remove driver-opts once fix is released docker/buildx#386 driver-opts: image=moby/buildkit:master - name: Login to GitHub Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.CR_PAT }} if: github.event_name == 'push' - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} if: github.event_name == 'push' - name: Build and push uses: docker/build-push-action@v2 with: context: . platforms: linux/amd64,linux/arm/v7,linux/arm64 push: ${{ github.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} build-args: | VERSION=${{ steps.tags.outputs.version }} COMMIT_HASH=${{ steps.tags.outputs.commit_hash }} BUILD_DATE=${{ steps.tags.outputs.build_date }} labels: | org.opencontainers.image.title=${{ github.event.repository.name }} org.opencontainers.image.description=${{ github.event.repository.description }} org.opencontainers.image.url=${{ github.event.repository.html_url }} org.opencontainers.image.source=${{ github.event.repository.clone_url }} org.opencontainers.image.version=${{ steps.tags.outputs.version }} org.opencontainers.image.created=${{ steps.tags.outputs.build_date }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }} org.opencontainers.image.documentation=https://dexidp.io/docs/