-
Notifications
You must be signed in to change notification settings - Fork 6
157 lines (136 loc) · 6.57 KB
/
Copy pathpublish.yml
File metadata and controls
157 lines (136 loc) · 6.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
name: Create Release Images
on:
release:
types: [released]
env:
app-name: carrot
repo-owner: ${{ github.repository_owner }}
registry: ghcr.io
jobs:
publish:
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Check out the repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: downcase repo-owner
run: |
echo "REPO_OWNER_LOWER=${GITHUB_REPOSITORY_OWNER,,}" >>${GITHUB_ENV}
# Read source version from pyproject.toml
- uses: SebRollen/toml-action@b1b3628f55fc3a28208d4203ada8b737e9687876 # v1.2.0
id: read_version
with:
file: app/api/pyproject.toml
field: project.version
# Parse version from release tag
- name: Parse version from tag
id: version
uses: release-kit/semver@97491c46500b6e758ced599794164a234b8aa08c # v2.0.7
# Fail on Version Mismatch
- name: Fail on Version Mismatch
if: ${{ steps.read_version.outputs.value != steps.version.outputs.full }}
run: |
echo "::error::Release tag version '${{ steps.version.outputs.full }}' doesn't match source version '${{ steps.read_version.outputs.value }}'"
exit 1
# Check that edge images exist
- uses: tyriis/docker-image-tag-exists@71a750a41aa78e4efb0842f538140c5df5b8166f # v2.1.0
with:
registry: ${{ env.registry }}
repository: ${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/frontend
tag: edge
- uses: tyriis/docker-image-tag-exists@71a750a41aa78e4efb0842f538140c5df5b8166f # v2.1.0
with:
registry: ${{ env.registry }}
repository: ${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/backend
tag: edge
- uses: tyriis/docker-image-tag-exists@71a750a41aa78e4efb0842f538140c5df5b8166f # v2.1.0
with:
registry: ${{ env.registry }}
repository: ${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/airflow-webserver
tag: edge
- uses: tyriis/docker-image-tag-exists@71a750a41aa78e4efb0842f538140c5df5b8166f # v2.1.0
with:
registry: ${{ env.registry }}
repository: ${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/airflow-scheduler
tag: edge
# Docker Login
- name: Docker Login
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
with:
registry: ${{ env.registry }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Use metadata action to generate tags for frontend
- name: Docker Metadata action - Frontend
id: meta-frontend
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
images: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/frontend
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}
type=semver,pattern={{major}}.{{minor}}
# Use metadata action to generate tags for backend
- name: Docker Metadata action - Backend
id: meta-backend
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
images: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/backend
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}
type=semver,pattern={{major}}.{{minor}}
# Use metadata action to generate tags for airflow-webserver
- name: Docker Metadata action - Airflow Webserver
id: meta-airflow-webserver
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
images: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/airflow-webserver
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}
type=semver,pattern={{major}}.{{minor}}
# Use metadata action to generate tags for airflow-scheduler
- name: Docker Metadata action - Airflow Scheduler
id: meta-airflow-scheduler
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
images: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/airflow-scheduler
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}
type=semver,pattern={{major}}.{{minor}}
# Retag frontend edge image with release version
- name: Push frontend image tags
uses: akhilerm/tag-push-action@f35ff2cb99d407368b5c727adbcc14a2ed81d509 # v2.2.0
with:
src: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/frontend:edge
dst: ${{ steps.meta-frontend.outputs.tags }}
# Retag backend edge image with release version
- name: Push backend image tags
uses: akhilerm/tag-push-action@f35ff2cb99d407368b5c727adbcc14a2ed81d509 # v2.2.0
with:
src: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/backend:edge
dst: ${{ steps.meta-backend.outputs.tags }}
# Retag Airflow webserver edge image with release version
- name: Push Airflow webserver image tags
uses: akhilerm/tag-push-action@f35ff2cb99d407368b5c727adbcc14a2ed81d509 # v2.2.0
with:
src: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/airflow-webserver:edge
dst: ${{ steps.meta-airflow-webserver.outputs.tags }}
# Retag Airflow scheduler edge image with release version
- name: Push Airflow scheduler image tags
uses: akhilerm/tag-push-action@f35ff2cb99d407368b5c727adbcc14a2ed81d509 # v2.2.0
with:
src: ${{ env.registry }}/${{ env.REPO_OWNER_LOWER }}/${{ env.app-name }}/airflow-scheduler:edge
dst: ${{ steps.meta-airflow-scheduler.outputs.tags }}
- name: Release Summary
run: |
echo "✅ Successfully retagged edge images for version: ${{ github.event.release.tag_name }}"
echo "📦 Frontend image tagged with: ${{ steps.meta-frontend.outputs.tags }}"
echo "📦 Backend image tagged with: ${{ steps.meta-backend.outputs.tags }}"
echo "📦 Airflow webserver image tagged with: ${{ steps.meta-airflow-webserver.outputs.tags }}"
echo "📦 Airflow scheduler image tagged with: ${{ steps.meta-airflow-scheduler.outputs.tags }}"
echo "🔗 Release URL: ${{ github.event.release.html_url }}"
echo "📅 Release time: $(date -u)"