diff --git a/.github/workflows/CD.yaml b/.github/workflows/CD.yaml new file mode 100644 index 0000000..84f7bb0 --- /dev/null +++ b/.github/workflows/CD.yaml @@ -0,0 +1,114 @@ +name: CD + +on: + workflow_dispatch: + + repository_dispatch: + types: [trigger-cd] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + name: Build and push Docker image + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + outputs: + tags: ${{ steps.meta.outputs.tags }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + uses: docker/metadata-action@v5 + id: meta + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha,enable=true,priority=100,prefix=sha-,suffix=,format=short + latest + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + deploy-to-aks: + name: deploy for ${{ matrix.org }} to ${{ matrix.cluster }} + runs-on: ubuntu-latest + needs: build-and-push + permissions: + contents: read + packages: write + strategy: + matrix: + org: + - fintlabs-no + cluster: +# - aks-alpha-fint-2021-11-18 + - aks-beta-fint-2021-11-23 +# - aks-api-fint-2022-02-08 +# - aks-pwf-fint-2021-10-20 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Get environment + uses: actions/github-script@v6 + id: environment + with: + script: return '${{ matrix.cluster }}'.split('-')[1] + result-encoding: string + + - name: Get resource group name + uses: actions/github-script@v6 + id: resource-group + with: + script: return 'rg-aks-${{ steps.environment.outputs.result }}' + result-encoding: string + + - name: Bake manifests with Kustomize + id: bake + uses: azure/k8s-bake@v2 + with: + renderEngine: 'kustomize' + kustomizationPath: 'kustomize/overlays/${{ steps.environment.outputs.result }}' + + - uses: azure/login@v1 + with: + creds: "${{ secrets[format('AKS_{0}_FINT_GITHUB', steps.environment.outputs.result)] }}" + + - uses: azure/use-kubelogin@v1.1 + with: + kubelogin-version: 'v0.0.26' + + - name: Set the target cluster + uses: azure/aks-set-context@v3 + with: + cluster-name: '${{ matrix.cluster }}' + resource-group: '${{ steps.resource-group.outputs.result }}' + admin: 'true' + use-kubelogin: 'true' + + - name: Deploy + uses: azure/k8s-deploy@v4.9 + with: + action: deploy + manifests: ${{ steps.bake.outputs.manifestsBundle }} + images: ${{ needs.build-and-push.outputs.tags }} + namespace: ${{ matrix.org }} diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml new file mode 100644 index 0000000..4782e96 --- /dev/null +++ b/.github/workflows/CI.yaml @@ -0,0 +1,33 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + + - name: Install Dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Start deployment + if: github.ref == 'refs/heads/main' + uses: peter-evans/repository-dispatch@v2.1.1 + with: + token: ${{ secrets.GITHUBACTION_TOKEN }} + repository: ${{ github.repository }} + event-type: trigger-cd diff --git a/kustomize/base/flais.yaml b/kustomize/base/flais.yaml new file mode 100644 index 0000000..0b418f5 --- /dev/null +++ b/kustomize/base/flais.yaml @@ -0,0 +1,24 @@ +apiVersion: fintlabs.no/v1alpha1 +kind: Application +metadata: + name: fint-admin-portal-frontend + namespace: fintlabs-no + labels: + app.kubernetes.io/name: fint-admin-portal-frontend + app.kubernetes.io/instance: fint-admin-portal-frontend_fintlabs_no + app.kubernetes.io/version: latest + app.kubernetes.io/component: frontend + app.kubernetes.io/part-of: fint-core + fintlabs.no/team: core + fintlabs.no/org-id: fintlabs.no +spec: + port: 8000 + imagePullPolicy: Always + orgId: fintlabs.no + image: ghcr.io/fintlabs/fint-admin-portal-frontend:latest + url: + hostname: admin-beta.fintlabs.no + ingress: + enabled: true + middlewares: + - fint-admin-portal-sso \ No newline at end of file diff --git a/kustomize/base/kustomization.yaml b/kustomize/base/kustomization.yaml new file mode 100644 index 0000000..71fe302 --- /dev/null +++ b/kustomize/base/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - flais.yaml + - sso.yaml \ No newline at end of file diff --git a/kustomize/base/sso.yaml b/kustomize/base/sso.yaml new file mode 100644 index 0000000..2e43800 --- /dev/null +++ b/kustomize/base/sso.yaml @@ -0,0 +1,15 @@ +apiVersion: fintlabs.no/v1alpha1 +kind: FLAISSso +metadata: + name: fint-admin-portal-frontend-sso + labels: + app.kubernetes.io/name: fint-admin-portal-frontend-sso + app.kubernetes.io/instance: fint-admin-portal-frontend-sso_fintlabs_no + app.kubernetes.io/version: latest + app.kubernetes.io/component: sso + app.kubernetes.io/part-of: fint-core + fintlabs.no/team: core + fintlabs.no/org-id: fintlabs.no +spec: + hostname: admin-beta.fintlabs.no + loggingLevel: debug \ No newline at end of file diff --git a/kustomize/overlays/beta/kustomization.yaml b/kustomize/overlays/beta/kustomization.yaml new file mode 100644 index 0000000..8cf018e --- /dev/null +++ b/kustomize/overlays/beta/kustomization.yaml @@ -0,0 +1,22 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: fintlabs-no +resources: + - ../../base +commonLabels: + app.kubernetes.io/name: fint-admin-portal-frontend + app.kubernetes.io/instance: fint-admin-portal-frontend_fintlabs_no + app.kubernetes.io/version: latest + app.kubernetes.io/component: frontend + app.kubernetes.io/part-of: fint-core + fintlabs.no/team: core + fintlabs.no/org-id: fintlabs.no + +patches: + - patch: |- + - op: replace + path: "/spec/url/hostname" + value: 'admin-beta.fintlabs.no' + target: + kind: Application + name: fint-admin-portal-frontend