commit
2e1f3e4d5f
3 changed files with 229 additions and 0 deletions
33
.github/workflows/build.yml
vendored
Normal file
33
.github/workflows/build.yml
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
name: Build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
build-push-php:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Build/Push
|
||||
uses: coopTilleuls/action-docker-build-push@v10
|
||||
with:
|
||||
IMAGE_NAME: plateformcoop-ebs-php
|
||||
BUILD_CONTEXT: .
|
||||
BUILD_TARGET: app_php
|
||||
REGISTRY_JSON_KEY: ${{ secrets.GITHUB_TOKEN }}
|
||||
IMAGE_REPOSITORY: ghcr.io/Apes-HDF
|
||||
|
||||
build-push-caddy:
|
||||
# Same Dockerfile as php, with a build target which is after
|
||||
needs: [build-push-php]
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Build/Push
|
||||
uses: coopTilleuls/action-docker-build-push@v10
|
||||
with:
|
||||
IMAGE_NAME: plateformcoop-ebs-caddy
|
||||
BUILD_CONTEXT: .
|
||||
BUILD_TARGET: app_caddy
|
||||
REGISTRY_JSON_KEY: ${{ secrets.GITHUB_TOKEN }}
|
||||
IMAGE_REPOSITORY: ghcr.io/Apes-HDF
|
||||
38
.github/workflows/cd.yml
vendored
Normal file
38
.github/workflows/cd.yml
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
name: CD
|
||||
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
# remove-deploy-label:
|
||||
# name: Remove deploy label
|
||||
# if: github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'deploy')
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - uses: mondeja/remove-labels-gh-action@v1
|
||||
# with:
|
||||
# token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# labels: |
|
||||
# deploy
|
||||
|
||||
build:
|
||||
name: Build
|
||||
uses: ./.github/workflows/build.yml
|
||||
|
||||
deploy:
|
||||
name: Deploy
|
||||
needs: [ build ]
|
||||
uses: ./.github/workflows/deploy.yml
|
||||
concurrency: ${{ github.ref }}-deploy
|
||||
secrets:
|
||||
domain: ${{ secrets.DOMAIN }}
|
||||
payum-apikey: ${{ secrets.PAYUM_APIKEY }}
|
||||
mailer-dsn: '${{ secrets.MAILER_DSN }}'
|
||||
storage-key: ${{ secrets.STORAGE_KEY }}
|
||||
storage-secret-key: ${{ secrets.STORAGE_SECRET_KEY}}
|
||||
project-id: ${{ secrets.PROJECT_ID }}
|
||||
workload-identity-provider: ${{ secrets.WORKLOAD_IDENTITY_PROVIDER }}
|
||||
database-url: ${{ secrets.DATABASE_URL }}
|
||||
158
.github/workflows/deploy.yml
vendored
Normal file
158
.github/workflows/deploy.yml
vendored
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
name: Deploy
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
secrets:
|
||||
kubeconfig:
|
||||
description: kubeconfig stored as a base64 encrypted secret
|
||||
required: true
|
||||
domain:
|
||||
description: Main project deploy domain used in URLs
|
||||
required: true
|
||||
payum-apikey:
|
||||
description: Payum API Key
|
||||
required: true
|
||||
sms-dsn:
|
||||
description: SMS DSN
|
||||
required: true
|
||||
mailer-dsn:
|
||||
description: MAILER DSN
|
||||
storage-key:
|
||||
description: storage key
|
||||
required: true
|
||||
storage-secret-key:
|
||||
description: storage secret key
|
||||
required: true
|
||||
project-id:
|
||||
description: GCP project ID
|
||||
required: true
|
||||
workload-identity-provider:
|
||||
description: GCP workload identity provider
|
||||
required: true
|
||||
database-url:
|
||||
description: Database URL
|
||||
required: true
|
||||
|
||||
|
||||
jobs:
|
||||
meta:
|
||||
name: Meta
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
context: ${{ steps.meta.outputs.context }}
|
||||
environment: ${{ steps.meta.outputs.environment }}
|
||||
image_tag: ${{ steps.meta.outputs.image_tag }}
|
||||
release_name: ${{ steps.meta.outputs.release_name }}
|
||||
url: ${{ steps.meta.outputs.url }}
|
||||
project: ${{ steps.meta.outputs.project }}
|
||||
namespace: ${{ steps.meta.outputs.namespace }}
|
||||
storage_name: ${{ steps.meta.outputs.storage_name }}
|
||||
steps:
|
||||
- name: Generate metadata
|
||||
id: meta
|
||||
run: |
|
||||
set -xo pipefail
|
||||
PROJECT=plateformcoop-ebs
|
||||
if [[ "${{ github.ref }}" == *"tag"* ]]; then
|
||||
# Tags are deployed in prod
|
||||
CONTEXT=prod
|
||||
ENVIRONMENT=prod
|
||||
IMAGE_TAG=${{ github.ref_name }}
|
||||
RELEASE_NAME=prod
|
||||
URL=${{ vars.DOMAIN }}
|
||||
STORAGE_NAME=${{ vars.STORAGE_BUCKET }}
|
||||
echo "context=${CONTEXT}" >> $GITHUB_OUTPUT
|
||||
echo "environment=${ENVIRONMENT}" >> $GITHUB_OUTPUT
|
||||
echo "image_tag=${IMAGE_TAG}" >> $GITHUB_OUTPUT
|
||||
echo "release_name=${RELEASE_NAME}" >> $GITHUB_OUTPUT
|
||||
echo "namespace=${CONTEXT}-${PROJECT}" >> $GITHUB_OUTPUT
|
||||
echo "url=${URL}" >> $GITHUB_OUTPUT
|
||||
echo "storage_name=${STORAGE_NAME}" >> $GITHUB_OUTPUT
|
||||
|
||||
deploy:
|
||||
name: Deploy
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
permissions:
|
||||
contents: 'read'
|
||||
id-token: 'write'
|
||||
pull-requests: 'write'
|
||||
environment:
|
||||
name: ${{ needs.meta.outputs.environment }}
|
||||
needs: ["meta"]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: GKE Auth
|
||||
uses: 'google-github-actions/auth@v2'
|
||||
with:
|
||||
project_id: '${{ secrets.project-id }}'
|
||||
workload_identity_provider: '${{ secrets.workload-identity-provider }}'
|
||||
|
||||
- name: Setup gcloud
|
||||
uses: google-github-actions/setup-gcloud@v1
|
||||
with:
|
||||
project_id: ${{ secrets.project-id }}
|
||||
|
||||
- name: Connect cluster
|
||||
run: |
|
||||
gcloud components install gke-gcloud-auth-plugin
|
||||
gcloud auth login --cred-file=$CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE
|
||||
gcloud container clusters get-credentials ${{ vars.CLUSTER_NAME }} --region europe-west1 --project ${{ secrets.project-id }}
|
||||
kubectl config view
|
||||
|
||||
# https://github.com/helm/helm/issues/8036
|
||||
- name: Build helm dependencies
|
||||
run: |
|
||||
set -o pipefail
|
||||
# add all repos
|
||||
if [ -f "./helm/chart/Chart.lock" ]; then
|
||||
yq --indent 0 '.dependencies | map(["helm", "repo", "add", .name, .repository] | join(" ")) | .[]' "./helm/chart/Chart.lock" | sh --;
|
||||
fi
|
||||
helm dependency build ./helm/chart
|
||||
|
||||
- name: Deploy on namespace
|
||||
id: deploy
|
||||
shell: bash
|
||||
run: |
|
||||
set -o pipefail
|
||||
if ! helm upgrade --install ${{ needs.meta.outputs.release_name }} ./helm/chart \
|
||||
--atomic \
|
||||
--debug \
|
||||
--namespace ${{ needs.meta.outputs.namespace }} \
|
||||
--set=php.image.tag=${{ needs.meta.outputs.image_tag }} \
|
||||
--set=caddy.image.tag=${{ needs.meta.outputs.image_tag }} \
|
||||
--set=ingress.hosts[0].host=${{ needs.meta.outputs.url }} \
|
||||
--set=ingress.tls[0].secretName=${{ needs.meta.outputs.release_name }}-tls \
|
||||
--set=ingress.tls[0].hosts[0]=${{ needs.meta.outputs.url }} \
|
||||
--set=postgresql.url="${{ secrets.database-url }}" \
|
||||
--set=payum.apikey="${{ secrets.payum-apikey }}" \
|
||||
--set=php.storage.bucket="${{ needs.meta.outputs.storage_name }}" \
|
||||
--set=php.storage.endpoint="https://storage.googleapis.com" \
|
||||
--set=php.storage.region="eu-west-1" \
|
||||
--set=php.storage.usePathStyleEndpoint=true \
|
||||
--set=php.storage.key="${{ secrets.storage-key }}" \
|
||||
--set=php.storage.secret="${{ secrets.storage-secret-key }}" \
|
||||
--values ./helm/chart/values-${{ needs.meta.outputs.context }}.yml \
|
||||
| sed --unbuffered '/USER-SUPPLIED VALUES/,$d' ; then
|
||||
echo "Deployment has failed!"
|
||||
echo "Here are the last events to help diagnose the problem:"
|
||||
kubectl get events --namespace ${{ needs.meta.outputs.namespace }} --sort-by .metadata.creationTimestamp
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Output deployment URL
|
||||
uses: actions/github-script@v6
|
||||
if: github.event_name == 'pull_request'
|
||||
env:
|
||||
URL: ${{ needs.meta.outputs.url }}
|
||||
with:
|
||||
script: |
|
||||
const { URL } = process.env
|
||||
github.rest.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: `Chart has been deployed with this url:\n\`\`\`\n${URL}\n\`\`\``
|
||||
})
|
||||
Loading…
Reference in a new issue