3939 # required: true
4040
4141jobs :
42+ meta :
43+ name : Meta
44+ runs-on : ubuntu-latest
45+ outputs :
46+ context : ${{ steps.meta.outputs.context }}
47+ cors : ${{ steps.meta.outputs.cors }}
48+ environment : ${{ steps.meta.outputs.environment }}
49+ namespace : ${{ steps.meta.outputs.namespace }}
50+ release_name : ${{ steps.meta.outputs.release_name }}
51+ replica : ${{ steps.meta.outputs.replica }}
52+ url : ${{ steps.meta.outputs.url }}
53+
54+ steps :
55+ - name : Generate metadata
56+ id : meta
57+ run : |
58+ set -o pipefail
59+ if [[ "${{ github.ref }}" == 'refs/heads/main' ]]; then
60+ # Tags are deployed in prod
61+ echo "context=prod" >> "$GITHUB_ENV"
62+ echo 'cors=["https://api-platform.com", "http://localhost", "https://localhost", "http://localhost:3000"]' >> "$GITHUB_ENV"
63+ echo "environment=prod" >> "$GITHUB_ENV"
64+ echo "namespace=prod-website" >> "$GITHUB_ENV"
65+ echo "release_name=website-prod" >> "$GITHUB_ENV"
66+ echo "replica=1" >> "$GITHUB_ENV"
67+ echo "url=api-platform.com" >> "$GITHUB_ENV"
68+ else
69+ echo "context=nonprod" >> "$GITHUB_ENV"
70+ if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
71+ echo "environment=Preview" >> "$GITHUB_ENV"
72+ echo release_name=pr-$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH") >> "$GITHUB_ENV"
73+ export release_name=pr-$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH")
74+ else
75+ echo "environment=Staging" >> "$GITHUB_ENV"
76+ echo "release_name=${{ github.ref_name }}" >> "$GITHUB_ENV"
77+ export release_name=${{ github.ref_name }}
78+ fi
79+ echo 'cors=["https://${{ env.RELEASE_NAME}}.apip.preprod-tilleuls.ovh", "http://localhost", "https://localhost", "http://localhost:3000"]' >> "$GITHUB_ENV"
80+ echo "namespace=nonprod-website" >> "$GITHUB_ENV"
81+ echo "replica=1" >> "$GITHUB_ENV"
82+ echo "url=$RELEASE_NAME.apip.preprod-tilleuls.ovh" >> "$GITHUB_ENV"
83+ fi
84+
85+
4286 deploy :
4387 name : Deploy
4488 runs-on : ubuntu-latest
4589 permissions :
4690 contents : ' read'
4791 id-token : ' write'
92+ environment :
93+ name : ${{ needs.meta.outputs.environment }}
4894 steps :
4995 - name : Checkout
5096 uses : actions/checkout@v3
@@ -71,101 +117,48 @@ jobs:
71117 helm repo add bitnami https://charts.bitnami.com/bitnami/
72118 helm repo add stable https://charts.helm.sh/stable/
73119 helm dependency build ./helm/api-platform
74- - name : Define namespace
75- run : |
76- set -o pipefail
77- if [[ "${{ github.ref }}" == 'refs/heads/main' ]]; then
78- # Tags are deployed in prod
79- echo "CONTEXT=prod" >> "$GITHUB_ENV"
80- echo "RELEASE_NAME=website-prod" >> "$GITHUB_ENV"
81- echo "URL=api-platform.com" >> "$GITHUB_ENV"
82- echo 'CORS=["https://api-platform.com", "http://localhost", "https://localhost", "http://localhost:3000"]' >> "$GITHUB_ENV"
83- echo "NAMESPACE=prod-website" >> "$GITHUB_ENV"
84- echo "REPLICA=1" >> "$GITHUB_ENV"
85- else
86- CONTEXT=nonprod
87- if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
88- echo RELEASE_NAME=pr-$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH") >> "$GITHUB_ENV"
89- export RELEASE_NAME=pr-$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH")
90- else
91- echo "RELEASE_NAME=${{ github.ref_name }}" >> "$GITHUB_ENV"
92- export RELEASE_NAME=${{ github.ref_name }}
93- fi
94- echo "URL=$RELEASE_NAME.apip.preprod-tilleuls.ovh" >> "$GITHUB_ENV"
95- echo "REPLICA=1" >> "$GITHUB_ENV"
96- echo "NAMESPACE=nonprod-website" >> "$GITHUB_ENV"
97- echo 'CORS=["https://${{ env.RELEASE_NAME}}.apip.preprod-tilleuls.ovh", "http://localhost", "https://localhost", "http://localhost:3000"]' >> "$GITHUB_ENV"
98- fi
99120 - name : HELM Deploy
100121 run : |
101122 set -o pipefail
102- if ! helm -n ${{ env.NAMESPACE }} status ${{ env.RELEASE_NAME }} &>/dev/null; then
103- JWT_PASSPHRASE=$(openssl rand -base64 32)
104- JWT_SECRET_KEY=$(openssl genpkey -pass file:<(echo "$JWT_PASSPHRASE") -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096)
105- helm upgrade ${{ env.RELEASE_NAME }} ./helm/api-platform \
106- --reuse-values \
107- --install \
108- --create-namespace \
109- --debug \
110- --wait \
111- --atomic \
112- --namespace=${{ env.NAMESPACE }} \
113- --set=app.version=${{ github.sha }} \
114- --set=php.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/php \
115- --set=php.image.tag=${{ inputs.docker-images-version }} \
116- --set=php.image.pullPolicy=Always \
117- --set=caddy.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/caddy \
118- --set=caddy.image.tag=${{ inputs.docker-images-version }} \
119- --set=caddy.image.pullPolicy=Always \
120- --set=pwa.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/pwa \
121- --set=pwa.image.tag=${{ inputs.docker-images-version }} \
122- --set=pwa.image.pullPolicy=Always \
123- --set=bucket.s3Upstream=storage.googleapis.com \
124- --set=bucket.s3Name=api-platform-website-v3 \
125- --set=service.type=NodePort \
126- --set=ingress.enabled=true \
127- --set=ingress.hosts[0].host=${{ env.URL }} \
128- --set=ingress.hosts[0].paths[0].path=/ \
129- --set=ingress.hosts[0].paths[0].pathType=ImplementationSpecific \
130- --set=ingress.tls[0].hosts[0]=${{ env.URL }} \
131- --set=ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt-production \
132- --set=ingress.tls[0].secretName=${{ env.RELEASE_NAME }}-website-ssl \
133- --set=php.jwt.secretKey="$JWT_SECRET_KEY" \
134- --set=php.jwt.publicKey="$(openssl pkey -in <(echo "$JWT_SECRET_KEY") -passin file:<(echo "$JWT_PASSPHRASE") -pubout)" \
135- --set=php.jwt.passphrase=$JWT_PASSPHRASE \
136- --set=php.corsAllowOrigin="^$(echo "${{ join(fromJSON(env.CORS), '|') }}" | sed 's/\./\\./g')$" \
137- --set=php.host=${{ env.URL }} \
138- --set=next.rootUrl=${{ env.URL }} \
139- --set=github.key=${{ secrets.gh-key }} \
140- --set=postgresql.global.postgresql.auth.password=$(openssl rand -base64 32 | tr -d "=+/") \
141- --set=postgresql.global.postgresql.auth.username=website \
142- | sed --unbuffered '/USER-SUPPLIED VALUES/,$d'
143- else
144- helm upgrade ${{ env.RELEASE_NAME }} ./helm/api-platform \
145- --reuse-values \
146- --install \
147- --create-namespace \
148- --debug \
149- --wait \
150- --atomic \
151- --namespace=${{ env.NAMESPACE }} \
152- --set=app.version=${{ github.sha }} \
153- --set=php.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/php \
154- --set=php.image.tag=${{ inputs.docker-images-version }} \
155- --set=php.image.pullPolicy=Always \
156- --set=caddy.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/caddy \
157- --set=caddy.image.tag=${{ inputs.docker-images-version }} \
158- --set=caddy.image.pullPolicy=Always \
159- --set=pwa.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/pwa \
160- --set=pwa.image.tag=${{ inputs.docker-images-version }} \
161- --set=pwa.image.pullPolicy=Always \
162- --set=php.corsAllowOrigin="^$(echo "${{ join(fromJSON(env.CORS), '|') }}" | sed 's/\./\\./g')$" \
163- --set=github.key=${{ secrets.gh-key }} \
164- --set=next.rootUrl=${{ env.URL }} \
165- --set=bucket.s3Upstream=storage.googleapis.com \
166- --set=bucket.s3Name=api-platform-website-v3 \
167- | sed --unbuffered '/USER-SUPPLIED VALUES/,$d'
168- fi
123+ # JWT_PASSPHRASE=$(openssl rand -base64 32)
124+ # JWT_SECRET_KEY=$(openssl genpkey -pass file:<(echo "$JWT_PASSPHRASE") -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096)
125+ helm upgrade ${{ needs.meta.outputs.release_name }} ./helm/api-platform \
126+ --install \
127+ --create-namespace \
128+ --debug \
129+ --wait \
130+ --atomic \
131+ --namespace ${{ needs.meta.outputs.namespace }} \
132+ --set=app.version=${{ github.sha }} \
133+ --set=php.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/php \
134+ --set=php.image.tag=${{ inputs.docker-images-version }} \
135+ --set=php.image.pullPolicy=Always \
136+ --set=caddy.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/caddy \
137+ --set=caddy.image.tag=${{ inputs.docker-images-version }} \
138+ --set=caddy.image.pullPolicy=Always \
139+ --set=pwa.image.repository=europe-west1-docker.pkg.dev/${{ secrets.gke-project }}/website/pwa \
140+ --set=pwa.image.tag=${{ inputs.docker-images-version }} \
141+ --set=pwa.image.pullPolicy=Always \
142+ --set=bucket.s3Upstream=storage.googleapis.com \
143+ --set=bucket.s3Name=api-platform-website-v3 \
144+ --set=service.type=NodePort \
145+ --set=ingress.enabled=true \
146+ --set=ingress.hosts[0].host=${{ needs.meta.outputs.url }} \
147+ --set=ingress.hosts[0].paths[0].path=/ \
148+ --set=ingress.hosts[0].paths[0].pathType=ImplementationSpecific \
149+ --set=ingress.tls[0].hosts[0]=${{ env.URL }} \
150+ --set=ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt-production \
151+ --set=ingress.tls[0].secretName=${{ needs.meta.outputs.release_name }}-website-ssl \
152+ # --set=php.jwt.secretKey="$JWT_SECRET_KEY" \
153+ # --set=php.jwt.publicKey="$(openssl pkey -in <(echo "$JWT_SECRET_KEY") -passin file:<(echo "$JWT_PASSPHRASE") -pubout)" \
154+ # --set=php.jwt.passphrase=$JWT_PASSPHRASE \
155+ --set=php.corsAllowOrigin="^$(echo "${{ join(fromJSON(env.CORS), '|') }}" | sed 's/\./\\./g')$" \
156+ --set=php.host=${{ env.URL }} \
157+ --set=next.rootUrl=${{ env.URL }} \
158+ --set=github.key=${{ secrets.gh-key }} \
159+ --set=postgresql.global.postgresql.auth.password=${{ secrets.pgpasswd }} \
160+ --set=postgresql.global.postgresql.auth.username=website \
161+ | sed --unbuffered '/USER-SUPPLIED VALUES/,$d'
169162 - name : Debug kube events
170163 if : failure()
171164 run : kubectl get events --namespace=${{ env.NAMESPACE }} --sort-by .metadata.creationTimestamp
0 commit comments