Skip to content

Commit 36b89cc

Browse files
committed
chore: apply babichev-design templates and Dockerfile changes
0 parents  commit 36b89cc

File tree

16 files changed

+793
-0
lines changed

16 files changed

+793
-0
lines changed

.github/dependabot.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: github-actions
4+
directory: "/"
5+
schedule:
6+
interval: daily
7+
open-pull-requests-limit: 10
8+
- package-ecosystem: docker
9+
directory: "/"
10+
schedule:
11+
interval: daily
12+
open-pull-requests-limit: 10
13+
14+

.github/workflows/builder.yaml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: builder
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*.*.*"
7+
8+
jobs:
9+
docker:
10+
runs-on: ubuntu-latest
11+
steps:
12+
-
13+
name: Checkout
14+
uses: actions/checkout@v6
15+
-
16+
name: Docker meta
17+
id: meta
18+
uses: docker/metadata-action@v5
19+
with:
20+
images: |
21+
bavix/oauth2-proxy
22+
ghcr.io/bavix/oauth2-proxy
23+
tags: |
24+
type=ref,event=branch
25+
type=semver,pattern={{version}}
26+
type=semver,pattern={{major}}.{{minor}}
27+
type=semver,pattern={{major}}
28+
-
29+
name: Set up QEMU
30+
uses: docker/setup-qemu-action@v3
31+
-
32+
name: Set up Docker Buildx
33+
uses: docker/setup-buildx-action@v3
34+
-
35+
name: Login to GitHub Container Registry
36+
if: github.event_name != 'pull_request'
37+
uses: docker/login-action@v3
38+
with:
39+
registry: ghcr.io
40+
username: ${{ github.actor }}
41+
password: ${{ secrets.GITHUB_TOKEN }}
42+
-
43+
name: Login to Dockerhub Container Registry
44+
if: github.event_name != 'pull_request'
45+
uses: docker/login-action@v3
46+
with:
47+
username: ${{ secrets.DOCKERHUB_LOGIN }}
48+
password: ${{ secrets.DOCKERHUB_TOKEN }}
49+
-
50+
name: Build and push
51+
uses: docker/build-push-action@v6
52+
with:
53+
context: .
54+
push: ${{ github.event_name != 'pull_request' }}
55+
tags: ${{ steps.meta.outputs.tags }}
56+
labels: ${{ steps.meta.outputs.labels }}
57+
platforms: linux/amd64,linux/arm64
58+
build-args: |
59+
version=${{ github.ref_name }}
60+
61+

.github/workflows/test.yaml

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
name: test
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
branches:
9+
- master
10+
11+
jobs:
12+
integration-test:
13+
runs-on: ubuntu-latest
14+
steps:
15+
-
16+
name: Checkout
17+
uses: actions/checkout@v6
18+
-
19+
name: Set up Docker Buildx
20+
uses: docker/setup-buildx-action@v3
21+
-
22+
name: Build Docker image
23+
uses: docker/build-push-action@v6
24+
with:
25+
context: .
26+
push: false
27+
tags: oauth2-proxy:test
28+
load: true
29+
build-args: |
30+
version=test
31+
-
32+
name: Create Docker network
33+
run: |
34+
docker network create consul-network || true
35+
-
36+
name: Start Consul DC1 (server mode, not dev)
37+
run: |
38+
docker run -d \
39+
--name consul-dc1 \
40+
--network consul-network \
41+
-p 8500:8500 \
42+
-p 8300:8300 \
43+
-p 8301:8301 \
44+
-p 8302:8302/udp \
45+
hashicorp/consul:latest agent -server \
46+
-bootstrap-expect=1 \
47+
-datacenter=dc1 \
48+
-client=0.0.0.0 \
49+
-ui
50+
echo "Waiting for Consul DC1 to be ready..."
51+
for i in {1..60}; do
52+
if docker exec consul-dc1 consul members 2>/dev/null | grep -q "alive"; then
53+
echo "Consul DC1 is ready"
54+
break
55+
fi
56+
sleep 1
57+
done
58+
if [ $i -eq 60 ]; then
59+
echo "ERROR: Consul DC1 failed to start"
60+
docker logs consul-dc1
61+
exit 1
62+
fi
63+
-
64+
name: Start Consul DC2 (server mode, not dev)
65+
run: |
66+
docker run -d \
67+
--name consul-dc2 \
68+
--network consul-network \
69+
-p 8501:8500 \
70+
-p 8303:8300 \
71+
-p 8304:8301 \
72+
-p 8305:8302/udp \
73+
hashicorp/consul:latest agent -server \
74+
-bootstrap-expect=1 \
75+
-datacenter=dc2 \
76+
-client=0.0.0.0 \
77+
-ui
78+
echo "Waiting for Consul DC2 to be ready..."
79+
for i in {1..60}; do
80+
if docker exec consul-dc2 consul members 2>/dev/null | grep -q "alive"; then
81+
echo "Consul DC2 is ready"
82+
break
83+
fi
84+
sleep 1
85+
done
86+
if [ $i -eq 60 ]; then
87+
echo "ERROR: Consul DC2 failed to start"
88+
docker logs consul-dc2
89+
exit 1
90+
fi
91+
-
92+
name: Join DC1 and DC2 via WAN
93+
run: |
94+
DC1_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' consul-dc1)
95+
DC2_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' consul-dc2)
96+
echo "DC1 IP: $DC1_IP"
97+
echo "DC2 IP: $DC2_IP"
98+
echo "Joining DC2 to DC1 via WAN..."
99+
docker exec consul-dc2 consul join -wan ${DC1_IP}:8302
100+
sleep 3
101+
echo "DC1 WAN members:"
102+
docker exec consul-dc1 consul members -wan || echo "No WAN members in DC1"
103+
echo "DC2 WAN members:"
104+
docker exec consul-dc2 consul members -wan || echo "No WAN members in DC2"
105+
-
106+
name: Add test data to DC1
107+
run: |
108+
docker exec consul-dc1 consul kv put test/key1 "value1"
109+
docker exec consul-dc1 consul kv put test/key2 "value2"
110+
docker exec consul-dc1 consul kv put test/nested/key3 "value3"
111+
echo "Test data added to DC1:"
112+
docker exec consul-dc1 consul kv get -recurse test/
113+
-
114+
name: Verify DC2 is empty
115+
run: |
116+
echo "DC2 should be empty initially:"
117+
docker exec consul-dc2 consul kv get -recurse test/ 2>&1 || echo "DC2 is empty (as expected)"
118+
-
119+
name: Create consul-replicate config
120+
run: |
121+
cat > /tmp/consul-replicate.hcl << 'EOF'
122+
consul {
123+
address = "consul-dc2:8500"
124+
}
125+
126+
prefix {
127+
source = "test"
128+
datacenter = "dc1"
129+
destination = "test"
130+
}
131+
132+
log_level = "debug"
133+
EOF
134+
echo "Consul-replicate config:"
135+
cat /tmp/consul-replicate.hcl
136+
-
137+
name: Verify DC1 data accessible from DC2 via WAN
138+
run: |
139+
echo "Testing if DC2 can read DC1 data via WAN..."
140+
docker exec consul-dc2 consul kv get -datacenter=dc1 test/key1 || echo "Cannot read from DC1 via WAN"
141+
docker exec consul-dc2 consul kv get -datacenter=dc1 -recurse test/ || echo "Cannot read from DC1 via WAN"
142+
-
143+
name: Run consul-replicate to replicate from DC1 to DC2
144+
run: |
145+
echo "Running consul-replicate with config file..."
146+
OUTPUT=$(docker run --rm \
147+
--network consul-network \
148+
-v /tmp/consul-replicate.hcl:/consul-replicate.hcl \
149+
oauth2-proxy:test \
150+
-config /consul-replicate.hcl \
151+
-once \
152+
-log-level=debug \
153+
2>&1) || true
154+
echo "=== consul-replicate output (config file) ==="
155+
echo "$OUTPUT"
156+
echo "=== Exit code: $? ==="
157+
158+
echo ""
159+
echo "Trying with CLI flags..."
160+
OUTPUT2=$(docker run --rm \
161+
--network consul-network \
162+
oauth2-proxy:test \
163+
-consul-addr=consul-dc2:8500 \
164+
-prefix \"test@dc1:test\" \
165+
-once \
166+
-log-level=debug \
167+
2>&1) || true
168+
echo "=== consul-replicate output (CLI flags) ==="
169+
echo "$OUTPUT2"
170+
echo "=== Exit code: $? ==="
171+
-
172+
name: Verify data replicated to DC2
173+
run: |
174+
echo "Checking data in DC2:"
175+
docker exec consul-dc2 consul kv get -recurse test/ || echo "No data found"
176+
KEY1=$(docker exec consul-dc2 consul kv get test/key1 2>/dev/null | tail -1 || echo "")
177+
KEY2=$(docker exec consul-dc2 consul kv get test/key2 2>/dev/null | tail -1 || echo "")
178+
KEY3=$(docker exec consul-dc2 consul kv get test/nested/key3 2>/dev/null | tail -1 || echo "")
179+
180+
echo ""
181+
echo "=== DC1 data ==="
182+
docker exec consul-dc1 consul kv get -recurse test/
183+
echo ""
184+
echo "=== DC2 data ==="
185+
docker exec consul-dc2 consul kv get -recurse test/ || echo "No data in DC2"
186+
187+
if [ "$KEY1" != "value1" ] || [ "$KEY2" != "value2" ] || [ "$KEY3" != "value3" ]; then
188+
echo ""
189+
echo "ERROR: Data replication failed!"
190+
echo "Expected: value1, value2, value3"
191+
echo "Got: KEY1='$KEY1', KEY2='$KEY2', KEY3='$KEY3'"
192+
echo ""
193+
echo "Debugging info:"
194+
echo "DC1 members:"
195+
docker exec consul-dc1 consul members || true
196+
echo "DC2 members:"
197+
docker exec consul-dc2 consul members || true
198+
echo "DC1 WAN members:"
199+
docker exec consul-dc1 consul members -wan || true
200+
echo "DC2 WAN members:"
201+
docker exec consul-dc2 consul members -wan || true
202+
echo "DC1 logs (last 20 lines):"
203+
docker logs consul-dc1 2>&1 | tail -20 || true
204+
echo "DC2 logs (last 20 lines):"
205+
docker logs consul-dc2 2>&1 | tail -20 || true
206+
exit 1
207+
fi
208+
209+
echo ""
210+
echo "SUCCESS: All data replicated to DC2"
211+
echo "key1: $KEY1"
212+
echo "key2: $KEY2"
213+
echo "key3: $KEY3"
214+
-
215+
name: Cleanup
216+
if: always()
217+
run: |
218+
docker stop consul-dc1 consul-dc2 || true
219+
docker rm consul-dc1 consul-dc2 || true
220+
docker network rm consul-network || true
221+
222+

.gitignore

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
node_modules/
2+
dist/
3+
build/
4+
*.log
5+
.DS_Store
6+
/.env
7+
.env.local
8+
.envrc
9+
.idea/
10+
.vscode/
11+
npm-debug.log*
12+
/tmp/
13+
/.cache
14+
*.tgz
15+
coverage/
16+
.dockerignore
17+
18+
oauth2-proxy
19+
vendor
20+
dist
21+
release
22+
.godeps
23+
*.exe
24+
.env
25+
.bundle
26+
c.out
27+
28+
# Go.gitignore
29+
# Compiled Object files, Static and Dynamic libs (Shared Objects)
30+
*.o
31+
*.a
32+
*.so
33+
34+
# Folders
35+
_obj
36+
_test
37+
.DS_Store
38+
.idea/
39+
.vscode/*
40+
!/.vscode/tasks.json
41+
42+
# Architecture specific extensions/prefixes
43+
*.[568vq]
44+
[568vq].out
45+
46+
*.cgo1.go
47+
*.cgo2.c
48+
_cgo_defun.c
49+
_cgo_gotypes.go
50+
_cgo_export.*
51+
52+
_testmain.go
53+
54+
# Editor swap/temp files
55+
.*.swp
56+
57+
# Dockerfile.dev is ignored by both git and docker
58+
# for faster development cycle of docker build
59+
# cp Dockerfile Dockerfile.dev
60+
# vi Dockerfile.dev
61+
# docker build -f Dockerfile.dev .
62+
Dockerfile.dev

0 commit comments

Comments
 (0)