name: Build and test Docker image on: pull_request: branches: - main paths-ignore: - "./**/*.md" - "LICENSE" env: IMAGE_NAME: localhost:5000/cdalvaro/docker-salt-master:${{ github.sha }} REGISTRY_PATH: ${{ github.workspace }}/registry CACHE_PATH: /tmp/.buildx-cache jobs: build: name: Build runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2.4.0 - name: Set up QEMU uses: docker/setup-qemu-action@v1.2.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1.6.0 with: driver-opts: network=host - name: Start Docker registry run: | docker run --rm --detach --publish 5000:5000 \ --volume ${REGISTRY_PATH}:/var/lib/registry \ --name registry registry:2 - name: Cache Docker layers uses: actions/cache@v2.1.6 with: path: ${{ env.CACHE_PATH }} key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx- - name: Build docker-salt-master image uses: docker/build-push-action@v2.7.0 with: context: . file: ./Dockerfile platforms: linux/amd64,linux/arm64,linux/arm/v7 cache-from: | type=local,src=${{ env.CACHE_PATH }} ghcr.io/cdalvaro/docker-salt-master:latest cache-to: type=local,dest=${{ env.CACHE_PATH }} push: true tags: ${{ env.IMAGE_NAME }} - name: Stop Docker registry run: docker stop registry - name: Upload Docker registry data for testing uses: actions/upload-artifact@v2 with: name: docker-registry-data path: ${{ env.REGISTRY_PATH }}/ test: name: Test runs-on: ubuntu-latest needs: build strategy: matrix: platform: [linux/amd64, linux/arm64, linux/arm/v7] env: DOCKER_CLI_EXPERIMENTAL: enabled PLATFORM: ${{ matrix.platform }} BOOTUP_WAIT_SECONDS: 90 steps: - name: Checkout repository uses: actions/checkout@v2.4.0 - name: Download Docker registry data from build job uses: actions/download-artifact@v2 with: name: docker-registry-data path: ${{ env.REGISTRY_PATH }} - name: Enable Docker experimental run: | # Enable docker daemon experimental support. echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker # Install QEMU multi-architecture support for docker buildx. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - name: Start Docker registry run: | docker run --rm --detach --publish 5000:5000 \ --volume ${REGISTRY_PATH}:/var/lib/registry \ --name registry registry:2 sleep 10 - name: Import Docker images run: docker pull --platform ${{ matrix.platform }} ${IMAGE_NAME} - name: Docker inspect run: docker buildx imagetools inspect ${IMAGE_NAME} | grep '${{ matrix.platform }}' - name: Setup Python uses: actions/setup-python@v2.3.0 with: python-version: 3.8 - name: Execute basic tests run: tests/basic/test.sh - name: Execute salt-api tests run: tests/salt-api/test.sh - name: Execute gitfs tests env: GITFS_KEYS_DIR: tests/gitfs/data/keys/gitfs run: | mkdir -p "${GITFS_KEYS_DIR}" echo "${{ secrets.TESTS_REPO_PRIVATE_KEY }}" > "${GITFS_KEYS_DIR}"/gitfs_ssh chmod 600 "${GITFS_KEYS_DIR}"/gitfs_ssh echo "${{ secrets.TESTS_REPO_PUBLIC_KEY }}" > "${GITFS_KEYS_DIR}"/gitfs_ssh.pub chmod 644 "${GITFS_KEYS_DIR}"/gitfs_ssh.pub tests/gitfs/test.sh - name: Cleanup run: | docker stop registry