ci: publish Docker image and create release
Build and publish Docker image / publish (push) Failing after 2m12s
Build and publish Docker image / publish (push) Failing after 2m12s
This commit is contained in:
@@ -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}"
|
||||
@@ -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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user