diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..06863982 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,64 @@ +name: GHCR Release CI + +on: + push: + tags: + - "[0-9]+.[0-9]+.[0-9]+" + +env: + HAS_SECRETS: ${{ secrets.HAS_SECRETS }} + +jobs: + tests: + name: Release new Docker Image in GHCR + strategy: + matrix: + python-version: [3.12] + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Initialise gopass + uses: camptocamp/initialise-gopass-summon-action@v2 + with: + ci-gpg-private-key: ${{secrets.CI_GPG_PRIVATE_KEY}} + github-gopass-ci-token: ${{secrets.GOPASS_CI_GITHUB_TOKEN}} + if: env.HAS_SECRETS == 'HAS_SECRETS' + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Upgrade pip version + run: | + python -m pip install -U pip + + - run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH} + + - name: Install CI dependencies + run: python3 -m pip install --user --requirement=ci/requirements.txt + + - name: Environment information + run: c2cciutils-env + env: + GITHUB_EVENT: ${{ toJson(github) }} + + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{github.repository_owner}} + password: ${{secrets.GITHUB_TOKEN}} + + - name: Build Docker images for GHCR + run: make build_ghcr + + - name: Push Docker images to GHCR + run: make push_ghcr diff --git a/Makefile b/Makefile index 9bc5105e..429a235c 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,17 @@ build: ## Build docker image --build-arg=VERSION=$(VERSION) . docker tag camptocamp/geoshop-api:$(VERSION) camptocamp/geoshop-api:$(DOCKER_TAG) +.PHONY: build_ghcr +build_ghcr: ## Build docker image tagged for GHCR + docker build --tag=ghcr.io/camptocamp/geoshop-api:$(VERSION) \ + --build-arg=VERSION=$(VERSION) . + docker tag ghcr.io/camptocamp/geoshop-api:$(VERSION) ghcr.io/camptocamp/geoshop-api:$(DOCKER_TAG) + +.PHONY: push_ghcr +push_ghcr: ## Push docker image to GHCR + docker push ghcr.io/camptocamp/geoshop-api:$(VERSION) + docker push ghcr.io/camptocamp/geoshop-api:$(DOCKER_TAG) + .PHONY: test test: ## Run tests docker compose exec -T api python manage.py test -v 2 --force-color --noinput