-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (129 loc) · 5.42 KB
/
test-on-pr.yaml
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
name: Test on PR
on:
# For demo purposes only
workflow_dispatch:
pull_request:
branches: [ "master" ]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
DOCKER_BUILD_RECORD_RETENTION_DAYS: 1
VCLUSTER_VERSION: v0.21.2
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Authenticate on Google Cloud
uses: google-github-actions/auth@v2
with:
workload_identity_provider: projects/49535911505/locations/global/workloadIdentityPools/github-actions/providers/github-provider
service_account: [email protected]
- name: Set up Google Cloud CLI
uses: google-github-actions/setup-gcloud@v2
with:
version: latest
- name: Set GKE credentials
uses: google-github-actions/get-gke-credentials@v2
with:
cluster_name: minimal-cluster
location: europe-west9
- name: Install vCluster
run: wget -O vcluster "https://github.com/loft-sh/vcluster/releases/download/${{ env.VCLUSTER_VERSION }}/vcluster-linux-amd64" && chmod u+x vcluster && mv vcluster /usr/local/bin
- name: Create a vCluster
run: vcluster create vcluster-pipeline-${{github.run_id}} && exit 0
- name: Connect to the vCluster
run: vcluster connect vcluster-pipeline-${{github.run_id}}
- name: Schedule PostgreSQL
run: |
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency build kubernetes/helm
helm install postgresql kubernetes/helm
- name: Wait for PostgreSQL to be ready
run: kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=postgresql --timeout=300s
- name: Set environment variables from values.yaml
run: |
echo "PG_HOST=$(yq .postgresql.fullnameOverride kubernetes/values.yaml)" >> $GITHUB_ENV
echo "PG_USER=$(yq .postgresql.auth.user kubernetes/values.yaml)" >> $GITHUB_ENV
echo "PG_PASSWORD=$(yq .postgresql.auth.password kubernetes/values.yaml)" >> $GITHUB_ENV
- name: Install JRE
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: maven
- name: Cache build artifacts
uses: actions/cache@v3
with:
path: target
key: ${{ runner.os }}-build-${{ github.sha }}
restore-keys: |
${{ runner.os }}-build-
- name: Run "unit" tests
run: >
./mvnw -Dspring.r2dbc.username=${{ env.PG_USER }} \
-Dspring.r2dbc.password=${{ env.PG_PASSWORD }} \
-Dspring.r2dbc.url=jdbc:postgresql://${{ env.PG_HOST }}:5432/
-Dspring.flyway.username=${{ env.PG_USER }} \
-Dspring.flyway.password=${{ env.PG_PASSWORD }} \
-Dspring.flyway.url=jdbc:postgresql://${{ env.PG_HOST }}:5432 test
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=${{github.run_id}}
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v6
with:
context: .
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
push: true
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Set config map from values.yaml
run: |
kubectl create configmap postgres-config \
--from-literal="SPRING_FLYWAY_URL=jdbc:postgresql://${{ env.PG_HOST }}:5432/" \
--from-literal="SPRING_R2DBC_URL=r2dbc:postgresql://${{ env.PG_HOST }}:5432/" \
--from-literal="SPRING_R2DBC_USERNAME=${{ env.PG_USER }}" \
--from-literal="SPRING_R2DBC_PASSWORD=${{ env.PG_PASSWORD }}"
- name: Create Docker Registry Secret
run: |
kubectl create secret docker-registry github-docker-registry \
--docker-server=${{ env.REGISTRY }} --docker-email="[email protected]" \
--docker-username="${GITHUB_USERNAME}" --docker-password="${GITHUB_TOKEN}" \
--dry-run=client -o yaml | kubectl apply -f -
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_USERNAME: ${{ github.actor }}
- name: Install kustomize
run: |
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin
- name: Edit image tag with GitHub Run ID
run: (cd kubernetes && kustomize edit set image ghcr.io/ajavageek/vcluster-pipeline=:${{github.run_id}})
- name: Deploy Kustomized manifest to Google Cloud
run: |
kustomize build kubernetes > manifest.yml
kubectl apply -f manifest.yml
- name: Run "unit" tests
run: ./mvnw verify
- name: Delete the vCluster
run: vcluster delete vcluster-pipeline-${{github.run_id}}