Skip to content

Commit f1e5082

Browse files
committed
✨ Ready, set, sync!
1 parent e1ff715 commit f1e5082

31 files changed

+4887
-0
lines changed

.github/notes_workflows.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
# [build-branches.yml](/.github/workflows/build-branches.yml), [build-manual.yml](/.github/workflows/build-manual.yml), [build-tags.yml](/.github/workflows/build-tags.yml)
3+
4+
Самописные решения, корректность работы которых может быть под вопросом. Однако я закладывал следующее:
5+
6+
1. Автосборка **только на master** с возможностью ручного запуска:
7+
1. `build-branches.yml` — если на коммит не указывает тег и изменились отслеживаемые "важные" файлы, строим и вешаем два тега: `sha_master` и `master`;
8+
2. `build-tags.yml` — всегда для git-тегов вида `v*.*.*` строим и вешаем пять тегов: `latest`, `master`, `major`, `major.minor`, `major.minor.patch`.
9+
2. `build-manual.yml` - принудительная ручная сборка на любой ветке с тегами `sha_branch` и `branch`.
10+
11+
Следствия:
12+
1. `git push origin <тег>` не вызовет сборку, если коммит, на который указывает тег, **не принадлежит истории ветки `master`**. Последующий запуск `git push` этого коммита на `master` **необходим**, но не запустит `build-branches.yml`, т.к. тег уже существует. Если так случилось, необходимо вручную **переиграть соответствующую задачу `build-tags.yml`** в github actions. В идеале пушить нужно сразу так: `git push origin master <тег>`.
13+
2. Ручной перезапуск отыгранной задачи `build-tags.yml` для старых тегов может украсть теги `master` и `latest`, что нежелательно. В целом, можно было бы адаптировать `build-manual.yml`, включив в него возможность билдить по тегу.
14+
15+
Короче, workflows неидеальны и требуют доработки/переосмысления.
16+
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
name: Build Docker Image (master branch)
3+
4+
on:
5+
push:
6+
branches: ['master']
7+
paths:
8+
- Dockerfile
9+
- env/requirements.txt
10+
workflow_dispatch:
11+
12+
concurrency:
13+
group: ${{ github.repository }}:branch:${{ github.sha }}
14+
cancel-in-progress: true
15+
16+
jobs:
17+
guard:
18+
runs-on: ubuntu-latest
19+
outputs:
20+
skip: ${{ steps.check.outputs.skip }}
21+
steps:
22+
- uses: actions/checkout@v4
23+
with:
24+
fetch-depth: 0
25+
fetch-tags: true
26+
- id: check
27+
run: |
28+
if git tag --points-at "${GITHUB_SHA}" | grep -q .; then
29+
echo "skip=true" >> $GITHUB_OUTPUT
30+
else
31+
echo "skip=false" >> $GITHUB_OUTPUT
32+
fi
33+
34+
build:
35+
needs: guard
36+
if: needs.guard.outputs.skip == 'false'
37+
runs-on: ubuntu-latest
38+
permissions:
39+
contents: read
40+
packages: write
41+
steps:
42+
- name: Checkout code
43+
uses: actions/checkout@v4
44+
with:
45+
fetch-depth: 0
46+
fetch-tags: true
47+
48+
- name: Set additional env
49+
run: |
50+
SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7)
51+
echo "SHORT_SHA=${SHORT_SHA}" >> $GITHUB_ENV
52+
SAFE_BRANCH=$(echo "${GITHUB_REF_NAME}" | tr '/' '_')
53+
echo "SAFE_BRANCH=${SAFE_BRANCH}" >> $GITHUB_ENV
54+
55+
- name: Set up Docker Buildx
56+
uses: docker/setup-buildx-action@v3
57+
58+
- name: Log in to GHCR
59+
uses: docker/login-action@v3
60+
with:
61+
registry: ghcr.io
62+
username: ${{ github.actor }}
63+
password: ${{ secrets.GITHUB_TOKEN }}
64+
65+
- name: Docker meta
66+
id: meta
67+
uses: docker/metadata-action@v5
68+
with:
69+
images: ghcr.io/${{ github.repository }}
70+
tags: |
71+
type=raw,value=${{ env.SAFE_BRANCH }}
72+
type=raw,value=${{ env.SHORT_SHA }}_${{ env.SAFE_BRANCH }}
73+
74+
- name: Build and push
75+
uses: docker/build-push-action@v6
76+
with:
77+
context: .
78+
push: true
79+
cache-from: type=gha
80+
cache-to: type=gha,mode=max
81+
tags: ${{ steps.meta.outputs.tags }}
82+
labels: ${{ steps.meta.outputs.labels }}

.github/workflows/build-manual.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
name: Manual Build Docker Image
3+
4+
on:
5+
workflow_dispatch:
6+
7+
concurrency:
8+
group: ${{ github.repository }}:manual:${{ github.ref_name }}:${{ github.sha }}
9+
cancel-in-progress: true
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-latest
14+
permissions:
15+
contents: read
16+
packages: write
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
fetch-depth: 0
21+
fetch-tags: true
22+
23+
- name: Set env
24+
run: |
25+
SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7)
26+
echo "SHORT_SHA=${SHORT_SHA}" >> $GITHUB_ENV
27+
SAFE_BRANCH=$(echo "${GITHUB_REF_NAME}" | tr '/' '_')
28+
echo "SAFE_BRANCH=${SAFE_BRANCH}" >> $GITHUB_ENV
29+
30+
- name: Set up Docker Buildx
31+
uses: docker/setup-buildx-action@v3
32+
33+
- name: Log in to GHCR
34+
uses: docker/login-action@v3
35+
with:
36+
registry: ghcr.io
37+
username: ${{ github.actor }}
38+
password: ${{ secrets.GITHUB_TOKEN }}
39+
40+
- name: Docker meta
41+
id: meta
42+
uses: docker/metadata-action@v5
43+
with:
44+
images: ghcr.io/${{ github.repository }}
45+
tags: |
46+
type=raw,value=${{ env.SAFE_BRANCH }}
47+
type=raw,value=${{ env.SHORT_SHA }}_${{ env.SAFE_BRANCH }}
48+
49+
- name: Build and push
50+
uses: docker/build-push-action@v6
51+
with:
52+
context: .
53+
push: true
54+
cache-from: type=gha
55+
cache-to: type=gha,mode=max
56+
tags: ${{ steps.meta.outputs.tags }}
57+
labels: ${{ steps.meta.outputs.labels }}

.github/workflows/build-tags.yml

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
name: Build Docker Image (tags on master)
3+
4+
on:
5+
push:
6+
tags: ['v*.*.*']
7+
workflow_dispatch:
8+
9+
concurrency:
10+
group: ${{ github.repository }}:tag:${{ github.sha }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
guard:
15+
runs-on: ubuntu-latest
16+
outputs:
17+
skip: ${{ steps.detect.outputs.on_default_branch == 'true' }}
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v4
21+
with:
22+
fetch-depth: 0
23+
fetch-tags: true
24+
25+
- name: Detect default branch
26+
id: detect
27+
run: |
28+
DEFAULT="${{ github.event.repository.default_branch }}"
29+
git fetch origin "$DEFAULT" --depth=1
30+
if git merge-base --is-ancestor "$GITHUB_SHA" "origin/$DEFAULT"; then
31+
echo "on_default_branch=true" >> $GITHUB_OUTPUT
32+
else
33+
echo "on_default_branch=false" >> $GITHUB_OUTPUT
34+
fi
35+
36+
build:
37+
needs: guard
38+
if: needs.guard.outputs.skip == 'true'
39+
runs-on: ubuntu-latest
40+
permissions:
41+
contents: read
42+
packages: write
43+
steps:
44+
- name: Checkout code
45+
uses: actions/checkout@v4
46+
with:
47+
fetch-depth: 0
48+
fetch-tags: true
49+
50+
- name: Set env
51+
run: |
52+
SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7)
53+
echo "SHORT_SHA=${SHORT_SHA}" >> $GITHUB_ENV
54+
55+
- name: Set up Docker Buildx
56+
uses: docker/setup-buildx-action@v3
57+
58+
- name: Log in to GHCR
59+
uses: docker/login-action@v3
60+
with:
61+
registry: ghcr.io
62+
username: ${{ github.actor }}
63+
password: ${{ secrets.GITHUB_TOKEN }}
64+
65+
- name: Docker meta
66+
id: meta
67+
uses: docker/metadata-action@v5
68+
with:
69+
images: ghcr.io/${{ github.repository }}
70+
flavor: |
71+
latest=auto
72+
tags: |
73+
type=semver,pattern={{version}}
74+
type=semver,pattern={{major}}.{{minor}}
75+
type=semver,pattern={{major}}
76+
type=raw,value=${{ github.event.repository.default_branch }}
77+
78+
- name: Build and push
79+
uses: docker/build-push-action@v6
80+
with:
81+
context: .
82+
push: true
83+
cache-from: type=gha
84+
cache-to: type=gha,mode=max
85+
tags: ${{ steps.meta.outputs.tags }}
86+
labels: ${{ steps.meta.outputs.labels }}

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/.ignore_files
2+
.idea
3+
source/.ipynb_checkpoints
4+
__pycache__/
5+
pyinstaller/build
6+
pyinstaller/dist
7+
docker-compose.yml
8+
docker_static/sync_settings.yml
9+
10+
11+
12+
13+
source/sync_settings.yml

Dockerfile

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# docker build -t gitea_2_sourcegraph_sync:latest -f ./Dockerfile .
2+
3+
FROM python:3.11-slim
4+
ENV DEBIAN_FRONTEND=noninteractive
5+
6+
RUN apt-get update && \
7+
apt-get install -y --no-install-suggests --no-install-recommends \
8+
supervisor curl && \
9+
apt autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/*
10+
11+
RUN curl -L https://sourcegraph.com/.api/src-cli/src_linux_amd64 \
12+
-o /usr/local/bin/src && chmod 755 /usr/local/bin/src
13+
14+
COPY ./env/requirements.txt .
15+
RUN pip install --no-cache-dir -r requirements.txt
16+
17+
ENV APP_CMD="gitea_2_sourcegraph_sync.py -y" \
18+
SETTINGS=/STATIC/sync_settings.yml
19+

0 commit comments

Comments
 (0)