Skip to content

Commit 69f2374

Browse files
committed
feat: implement GitHub Actions workflows and improve snapshot functionality
- Add multiple GitHub Actions workflows for builds, tests, release management, and more - Implement snapshot compression and optimize snapshot creation process - Update tests to cover new snapshot functionality - Refactor node and cache to support new snapshot features
1 parent 1db7ce5 commit 69f2374

19 files changed

+1042
-315
lines changed

.github/dependabot.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "gomod"
4+
directory: "/"
5+
schedule:
6+
interval: "daily"
7+
groups:
8+
go-deps:
9+
patterns:
10+
- "*"
11+
update-types:
12+
- "minor"
13+
- "patch"
14+
- package-ecosystem: "github-actions"
15+
directory: "/"
16+
schedule:
17+
interval: "daily"
18+
groups:
19+
actions-deps:
20+
patterns:
21+
- "*"
22+
update-types:
23+
- "minor"
24+
- "patch"
25+
- package-ecosystem: "docker"
26+
directory: "/"
27+
schedule:
28+
interval: "daily"
29+
groups:
30+
docker-deps:
31+
patterns:
32+
- "*"
33+
update-types:
34+
- "minor"
35+
- "patch"

.github/pull_request_template.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Description
2+
3+
< Replace with adequate description for this PR as per [Pull Request document](https://www.notion.so/rudderstacks/Pull-Requests-40a4c6bd7a5e4387ba9029bab297c9e3) >
4+
5+
## Linear Ticket
6+
7+
< Linear_Link >
8+
9+
## Security
10+
11+
- [ ] The code changed/added as part of this pull request won't create any security issues with how the software is being used.

.github/workflows/builds.yml

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
name: builds
2+
on:
3+
release:
4+
types: [ created ]
5+
push:
6+
branches:
7+
- main
8+
pull_request:
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.head_ref || github.sha }}
11+
cancel-in-progress: true
12+
permissions:
13+
id-token: write # allows the JWT to be requested from GitHub's OIDC provider
14+
contents: read # This is required for actions/checkout
15+
env:
16+
arch_amd64: amd64
17+
arch_arm64: arm64
18+
docker_images_keydb: |
19+
name=rudderstack/rudder-keydb
20+
docker_tags_keydb: |
21+
type=ref,event=branch
22+
type=raw,value=${{ github.head_ref }},enable=${{ github.event_name == 'pull_request' }}
23+
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
24+
type=semver,pattern={{version}},enable=${{ github.ref == format('refs/heads/{0}', 'main') || github.event_name == 'release' }}
25+
type=semver,pattern={{major}},enable=${{ github.ref == format('refs/heads/{0}', 'main') || github.event_name == 'release' }}
26+
type=semver,pattern={{major}}.{{minor}},enable=${{ github.ref == format('refs/heads/{0}', 'main') || github.event_name == 'release' }}
27+
docker_images_keydb_operator: |
28+
name=rudderstack/rudder-keydb-operator
29+
docker_tags_keydb_operator: |
30+
type=ref,event=branch
31+
type=raw,value=${{ github.head_ref }},enable=${{ github.event_name == 'pull_request' }}
32+
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
33+
type=semver,pattern={{version}},enable=${{ github.ref == format('refs/heads/{0}', 'main') || github.event_name == 'release' }}
34+
type=semver,pattern={{major}},enable=${{ github.ref == format('refs/heads/{0}', 'main') || github.event_name == 'release' }}
35+
type=semver,pattern={{major}}.{{minor}},enable=${{ github.ref == format('refs/heads/{0}', 'main') || github.event_name == 'release' }}
36+
jobs:
37+
docker-meta-keydb:
38+
runs-on: ubuntu-latest
39+
outputs:
40+
labels: ${{ steps.meta.outputs.labels }}
41+
build-date: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
42+
version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
43+
revision: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
44+
tags: ${{ steps.meta.outputs.tags }}
45+
arm64_tags: ${{ steps.arm64_meta.outputs.tags }}
46+
arm64_labels: ${{ steps.arm64_meta.outputs.labels }}
47+
amd64_tags: ${{ steps.amd64_meta.outputs.tags }}
48+
amd64_labels: ${{ steps.amd64_meta.outputs.labels }}
49+
steps:
50+
- name: Docker meta
51+
id: meta
52+
uses: docker/metadata-action@v5
53+
with:
54+
images: ${{env.docker_images_keydb}}
55+
tags: ${{env.docker_tags_keydb}}
56+
- name: Docker arm64 meta
57+
id: arm64_meta
58+
uses: docker/metadata-action@v5
59+
with:
60+
images: ${{env.docker_images_keydb}}
61+
tags: ${{env.docker_tags_keydb}}
62+
flavor: |
63+
suffix=-${{env.arch_arm64}},onlatest=true
64+
- name: Docker amd64 meta
65+
id: amd64_meta
66+
uses: docker/metadata-action@v5
67+
with:
68+
images: ${{env.docker_images_keydb}}
69+
tags: ${{env.docker_tags_keydb}}
70+
flavor: |
71+
suffix=-${{env.arch_amd64}},onlatest=true
72+
docker-keydb:
73+
needs:
74+
- docker-meta-keydb
75+
strategy:
76+
matrix:
77+
build-config:
78+
- os: [ self-hosted, Linux, ARM64, ubuntu-22 ]
79+
tags: ${{needs.docker-meta-keydb.outputs.arm64_tags}}
80+
labels: ${{needs.docker-meta-keydb.outputs.arm64_labels}}
81+
platform: linux/arm64
82+
- os: ubuntu-latest
83+
tags: ${{needs.docker-meta-keydb.outputs.amd64_tags}}
84+
labels: ${{needs.docker-meta-keydb.outputs.amd64_labels}}
85+
platform: linux/amd64
86+
runs-on: ${{matrix.build-config.os}}
87+
steps:
88+
- name: Checkout
89+
uses: actions/checkout@v4
90+
- name: Login to DockerHub
91+
uses: docker/login-action@v3
92+
with:
93+
username: rudderlabs
94+
password: ${{ secrets.DOCKERHUB_TOKEN }}
95+
- name: Set up Docker Buildx
96+
uses: docker/setup-buildx-action@v3
97+
- name: Build, scan and push
98+
uses: rudderlabs/[email protected]
99+
with:
100+
context: .
101+
platforms: ${{ matrix.build-config.platform }}
102+
push: true
103+
tags: ${{ matrix.build-config.tags }}
104+
labels: ${{ matrix.build-config.labels }}
105+
build-args: |
106+
BUILD_DATE=${{ needs.docker-meta-keydb.outputs.build-date }}
107+
VERSION=${{ needs.docker-meta-keydb.outputs.version }}
108+
COMMIT_HASH=${{ github.sha }}
109+
REVISION=${{ needs.docker-meta-keydb.outputs.revision }}
110+
111+
create-manifest:
112+
runs-on: ubuntu-latest
113+
needs: [ docker-keydb, docker-meta-keydb ]
114+
steps:
115+
- name: Set up Docker Buildx
116+
uses: docker/setup-buildx-action@v3
117+
- name: Login to DockerHub
118+
uses: docker/[email protected]
119+
with:
120+
username: rudderlabs
121+
password: ${{ secrets.DOCKERHUB_TOKEN }}
122+
- name: Create multi-arch manifest for Docker
123+
run: |
124+
while read -r tag; do
125+
echo "$tag"
126+
arm_tag=$(echo "${{ needs.docker-meta-keydb.outputs.arm64_tags }}" | grep "$tag")
127+
echo "$arm_tag"
128+
amd_tag=$(echo "${{ needs.docker-meta-keydb.outputs.amd64_tags }}" | grep "$tag")
129+
echo "$amd_tag"
130+
docker buildx imagetools create -t $tag $arm_tag $amd_tag
131+
done <<< "${{ needs.docker-meta-keydb.outputs.tags }}"
132+
133+
docker-meta-keydb-operator:
134+
runs-on: ubuntu-latest
135+
outputs:
136+
labels: ${{ steps.meta.outputs.labels }}
137+
build-date: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
138+
version: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
139+
revision: ${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
140+
tags: ${{ steps.meta.outputs.tags }}
141+
arm64_tags: ${{ steps.arm64_meta.outputs.tags }}
142+
arm64_labels: ${{ steps.arm64_meta.outputs.labels }}
143+
amd64_tags: ${{ steps.amd64_meta.outputs.tags }}
144+
amd64_labels: ${{ steps.amd64_meta.outputs.labels }}
145+
steps:
146+
- name: Docker meta
147+
id: meta
148+
uses: docker/metadata-action@v5
149+
with:
150+
images: ${{env.docker_images_keydb_operator}}
151+
tags: ${{env.docker_tags_keydb_operator}}
152+
- name: Docker arm64 meta
153+
id: arm64_meta
154+
uses: docker/metadata-action@v5
155+
with:
156+
images: ${{env.docker_images_keydb_operator}}
157+
tags: ${{env.docker_tags_keydb_operator}}
158+
flavor: |
159+
suffix=-${{env.arch_arm64}},onlatest=true
160+
- name: Docker amd64 meta
161+
id: amd64_meta
162+
uses: docker/metadata-action@v5
163+
with:
164+
images: ${{env.docker_images_keydb_operator}}
165+
tags: ${{env.docker_tags_keydb_operator}}
166+
flavor: |
167+
suffix=-${{env.arch_amd64}},onlatest=true
168+
docker-keydb-operator:
169+
needs:
170+
- docker-meta-keydb-operator
171+
strategy:
172+
matrix:
173+
build-config:
174+
- os: [ self-hosted, Linux, ARM64, ubuntu-22 ]
175+
tags: ${{needs.docker-meta-keydb-operator.outputs.arm64_tags}}
176+
labels: ${{needs.docker-meta-keydb-operator.outputs.arm64_labels}}
177+
platform: linux/arm64
178+
- os: ubuntu-latest
179+
tags: ${{needs.docker-meta-keydb-operator.outputs.amd64_tags}}
180+
labels: ${{needs.docker-meta-keydb-operator.outputs.amd64_labels}}
181+
platform: linux/amd64
182+
runs-on: ${{matrix.build-config.os}}
183+
steps:
184+
- name: Checkout
185+
uses: actions/checkout@v4
186+
- name: Login to DockerHub
187+
uses: docker/login-action@v3
188+
with:
189+
username: rudderlabs
190+
password: ${{ secrets.DOCKERHUB_TOKEN }}
191+
- name: Set up Docker Buildx
192+
uses: docker/setup-buildx-action@v3
193+
- name: Build, scan and push
194+
uses: rudderlabs/[email protected]
195+
with:
196+
context: .
197+
platforms: ${{ matrix.build-config.platform }}
198+
push: true
199+
tags: ${{ matrix.build-config.tags }}
200+
labels: ${{ matrix.build-config.labels }}
201+
build-args: |
202+
BUILD_DATE=${{ needs.docker-meta-keydb-operator.outputs.build-date }}
203+
VERSION=${{ needs.docker-meta-keydb-operator.outputs.version }}
204+
COMMIT_HASH=${{ github.sha }}
205+
REVISION=${{ needs.docker-meta-keydb-operator.outputs.revision }}
206+
207+
create-manifest-keydb-operator:
208+
runs-on: ubuntu-latest
209+
needs: [ docker-keydb-operator, docker-meta-keydb-operator ]
210+
steps:
211+
- name: Set up Docker Buildx
212+
uses: docker/setup-buildx-action@v3
213+
- name: Login to DockerHub
214+
uses: docker/[email protected]
215+
with:
216+
username: rudderlabs
217+
password: ${{ secrets.DOCKERHUB_TOKEN }}
218+
- name: Create multi-arch manifest for Docker
219+
run: |
220+
while read -r tag; do
221+
echo "$tag"
222+
arm_tag=$(echo "${{ needs.docker-meta-keydb-operator.outputs.arm64_tags }}" | grep "$tag")
223+
echo "$arm_tag"
224+
amd_tag=$(echo "${{ needs.docker-meta-keydb-operator.outputs.amd64_tags }}" | grep "$tag")
225+
echo "$amd_tag"
226+
docker buildx imagetools create -t $tag $arm_tag $amd_tag
227+
done <<< "${{ needs.docker-meta-keydb-operator.outputs.tags }}"

.github/workflows/housekeeping.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Handle stale PRs
2+
3+
on:
4+
schedule:
5+
- cron: '42 1 * * *'
6+
7+
jobs:
8+
prs:
9+
name: Clean up stale prs
10+
runs-on: ubuntu-latest
11+
12+
permissions:
13+
pull-requests: write
14+
15+
steps:
16+
- uses: actions/stale@v9
17+
with:
18+
repo-token: ${{ secrets.PAT }}
19+
operations-per-run: 200
20+
stale-pr-message: 'This PR is considered to be stale. It has been open 20 days with no further activity thus it is going to be closed in 7 days. To avoid such a case please consider removing the stale label manually or add a comment to the PR.'
21+
days-before-pr-stale: 20
22+
days-before-pr-close: 7
23+
stale-pr-label: 'Stale'
24+
25+
branches:
26+
name: Cleanup old branches
27+
runs-on: ubuntu-latest
28+
steps:
29+
- name: Checkout repository
30+
uses: actions/checkout@v4
31+
- name: Run delete-old-branches-action
32+
uses: beatlabs/[email protected]
33+
with:
34+
repo_token: ${{ github.token }}
35+
date: '2 months ago'
36+
dry_run: false
37+
delete_tags: false
38+
extra_protected_branch_regex: ^(main|master|release.*|rudder-saas)$
39+
exclude_open_pr_branches: true
40+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
name: 'Pull Request Description'
2+
on:
3+
pull_request:
4+
types:
5+
- opened
6+
- edited
7+
- reopened
8+
9+
jobs:
10+
enforce:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: rudderlabs/[email protected]
15+
with:
16+
repo-token: '${{ secrets.PAT }}'
17+
placeholder-regex: '< Replace .* >'

.github/workflows/release-please.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
on:
2+
push:
3+
branches:
4+
- "release/*"
5+
- "main"
6+
name: release-please
7+
jobs:
8+
release-please:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Extract branch name
12+
shell: bash
13+
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
14+
id: extract_branch
15+
- uses: google-github-actions/release-please-action@v3
16+
with:
17+
token: ${{ secrets.PAT }}
18+
pull-request-title-pattern: "chore: release ${version}"
19+
release-type: go
20+
package-name: rudder-keydb
21+
default-branch: ${{ steps.extract_branch.outputs.branch }}
22+
changelog-types: '[{"type":"feat","section":"Features","hidden":false},{"type":"fix","section":"Bug Fixes","hidden":false},{"type":"chore","section":"Miscellaneous","hidden":false},{"type":"refactor","section":"Miscellaneous","hidden":false},{"type":"test","section":"Miscellaneous","hidden":false},{"type":"doc","section":"Documentation","hidden":false}]'
23+
bump-minor-pre-major: true

0 commit comments

Comments
 (0)