ci: publish Docker image and create release
Build and publish Docker image / publish (push) Failing after 2m12s

This commit is contained in:
MS.Kondratev
2026-07-15 14:52:16 +05:00
parent 55f8e929c4
commit d66d52bc65
2 changed files with 99 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
name: Build and publish Docker image
on:
push:
branches:
- main
permissions:
contents: read
packages: write
releases: write
env:
REGISTRY: git.spyk3r.com
IMAGE_NAME: spyk3r/timerr
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to Gitea Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ gitea.actor }}
password: ${{ secrets.GITEA_TOKEN }}
- name: Build and publish image
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ gitea.sha }}
- name: Create Gitea release
shell: bash
env:
API_URL: ${{ gitea.api_url }}
REPOSITORY: ${{ gitea.repository }}
COMMIT_SHA: ${{ gitea.sha }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
set -euo pipefail
tag="build-${COMMIT_SHA}"
release_url="${API_URL}/repos/${REPOSITORY}/releases"
status=$(curl --silent --output /dev/null --write-out '%{http_code}' \
--header "Authorization: token ${GITEA_TOKEN}" \
"${release_url}/tags/${tag}")
if [ "${status}" = "200" ]; then
echo "Release ${tag} already exists"
exit 0
fi
if [ "${status}" != "404" ]; then
echo "Unable to check release ${tag}: HTTP ${status}" >&2
exit 1
fi
curl --fail-with-body --request POST \
--header "Authorization: token ${GITEA_TOKEN}" \
--header "Content-Type: application/json" \
--data "{\"tag_name\":\"${tag}\",\"target_commitish\":\"${COMMIT_SHA}\",\"name\":\"Build ${COMMIT_SHA}\",\"body\":\"Docker image: ${REGISTRY}/${IMAGE_NAME}:${COMMIT_SHA}\",\"draft\":false,\"prerelease\":false}" \
"${release_url}"
+27
View File
@@ -22,3 +22,30 @@ py -3.12 -m venv .venv
.\.venv\Scripts\python.exe manage.py check
.\.venv\Scripts\python.exe -m pytest
```
## Docker image
При каждом push в ветку `main` Gitea Actions собирает образ и публикует его в
Container Registry, а затем создаёт Gitea Release с тегом
`build-<commit-sha>`:
```text
git.spyk3r.com/spyk3r/timerr:latest
git.spyk3r.com/spyk3r/timerr:<commit-sha>
```
Для запуска приватного образа на VPS сначала войдите в registry с помощью
логина Gitea и personal access token с правом чтения packages:
```bash
docker login git.spyk3r.com
docker pull git.spyk3r.com/spyk3r/timerr:latest
docker run -d --name timerr --restart unless-stopped \
-p 8000:8000 \
-e DEBUG=0 \
-e SECRET_KEY='replace-with-a-long-random-secret' \
-e ALLOWED_HOSTS='your-domain.example' \
-e DATABASE_NAME=/app/data/timerr.sqlite3 \
-v timerr-data:/app/data \
git.spyk3r.com/spyk3r/timerr:latest
```