name: test on: pull_request: push: branches: - master workflow_dispatch: inputs: pytest_addopts: description: Extra options for pytest; use -vv for full details; see https://docs.pytest.org/en/latest/example/simple.html#how-to-change-command-line-options-defaults required: false env: LANG: "en_US.utf-8" LC_ALL: "en_US.utf-8" PIP_CACHE_DIR: ${{ github.workspace }}/.cache.~/pip PIPX_HOME: ${{ github.workspace }}/.cache.~/pipx POETRY_CACHE_DIR: ${{ github.workspace }}/.cache.~/pypoetry POETRY_VIRTUALENVS_IN_PROJECT: "true" PYTEST_ADDOPTS: ${{ github.event.inputs.pytest_addopts }} PYTHONIOENCODING: "UTF-8" jobs: build-test-push: runs-on: ubuntu-latest env: DOCKER_REPO: tecnativa/docker-socket-proxy steps: # Prepare Docker environment and build - uses: actions/checkout@v2 - uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build image(s) uses: docker/build-push-action@v2 with: context: . file: ./Dockerfile # HACK: Build single platform image for testing. See https://github.com/docker/buildx/issues/59 load: true push: false tags: | ${{ env.DOCKER_REPO }}:local # Set up and run tests - name: Install python uses: actions/setup-python@v1 with: python-version: "3.9" - name: Generate cache key CACHE run: echo "CACHE=${{ secrets.CACHE_DATE }} ${{ runner.os }} $(python -VV | sha256sum | cut -d' ' -f1) ${{ hashFiles('pyproject.toml') }} ${{ hashFiles('poetry.lock') }}" >> $GITHUB_ENV - uses: actions/cache@v2 with: path: | .cache.~ .venv ~/.local/bin key: venv ${{ env.CACHE }} - run: pip install poetry - name: Patch $PATH run: echo "$HOME/.local/bin" >> $GITHUB_PATH - run: poetry install # Run tests - run: poetry run pytest env: DOCKER_IMAGE_NAME: ${{ env.DOCKER_REPO }}:local # Build and push - name: Login to DockerHub if: github.repository == 'Tecnativa/docker-socket-proxy' && github.ref == 'refs/heads/master' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_LOGIN }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GitHub Container Registry if: github.repository == 'Tecnativa/docker-socket-proxy' && github.ref == 'refs/heads/master' uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ secrets.BOT_LOGIN }} password: ${{ secrets.BOT_TOKEN }} - name: Build and push if: github.repository == 'Tecnativa/docker-socket-proxy' && github.ref == 'refs/heads/master' uses: docker/build-push-action@v2 with: context: . file: ./Dockerfile platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm/v8,linux/arm64,linux/ppc64le,linux/s390x load: false push: true tags: | ghcr.io/${{ env.DOCKER_REPO }} ${{ env.DOCKER_REPO }}