Skip to content

Commit

Permalink
Add Barista Api deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
fredimachado committed Sep 21, 2023
1 parent 8da9f81 commit 6437b42
Show file tree
Hide file tree
Showing 4 changed files with 175 additions and 7 deletions.
130 changes: 130 additions & 0 deletions .github/workflows/barista-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
name: Barista API

on:
push:
branches: [ "main" ]
paths:
- 'src/Barista/**'
- '.github/workflows/barista-api.yml'
workflow_dispatch:

env:
PROJECT_NAME: NCafe.Barista.Api
REGISTRY: ghcr.io
IMAGE_NAME: fredimachado/ncafe-barista-api

defaults:
run:
working-directory: src/Barista/NCafe.Barista.Api

jobs:
build:
runs-on: ubuntu-latest

permissions:
contents: read
packages: write

steps:

- uses: actions/checkout@v3

- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 7.0.x

- name: Restore dependencies
run: dotnet restore

- name: Test
run: dotnet test --results-directory ./testresults --logger "trx;LogFileName=test_results.xml" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput=./testresults/coverage/ ../**.Tests/**.csproj

- name: Build
run: dotnet build -c Release --no-restore /p:CopyLocalLockFileAssemblies=true

- name: Publish
run: dotnet publish -c Release --no-restore --no-build -o ./output

- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: src/Barista/NCafe.Barista.Api
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

- name: Install Helm
uses: azure/setup-helm@v3
with:
version: v3.11.1

- name: Generate release artifacts
run: |
chmod +x $GITHUB_WORKSPACE/scripts/generate-artifacts
$GITHUB_WORKSPACE/scripts/generate-artifacts -a appspec.yaml -i ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} -t ${{ steps.meta.outputs.version }} -r https://fredimachado.github.io/helm-charts
- name: Archive release artifacts
uses: actions/upload-artifact@v3
with:
name: release-artifacts
path: src/Barista/NCafe.Barista.Api/deploy/

release:
runs-on: self-hosted
needs: build

env:
ENVIRONMENT: dev
CONNECTIONSTRINGS__EVENTSTORE: ${{ secrets.CONNECTIONSTRINGS__EVENTSTORE }}
CONNECTIONSTRINGS__RABBITMQ: ${{ secrets.CONNECTIONSTRINGS__RABBITMQ }}
NGINX_USER: ${{ secrets.NGINX_USER }}
NGINX_PASSWORD: ${{ secrets.NGINX_PASSWORD }}

environment: dev

steps:

- uses: actions/checkout@v3

- name: Download release artifacts
uses: actions/download-artifact@v3
with:
name: release-artifacts
path: src/Barista/NCafe.Barista.Api/deploy/

- uses: jkroepke/setup-helmfile@v1
with:
version: '0.156.0'

- name: Deploy to Kubernetes
run: |
helmfile init --force
sed -i "s/[$]namespace[$]/${{ env.ENVIRONMENT }}/g" deploy/helmfile.yaml
echo -e "\e[92mConfiguring kubernetes access in pipeline...\e[0m"
mkdir -p $(pwd)/.kube
echo ${{ secrets.KUBE_CONFIG }} | base64 -d > $(pwd)/.kube/config
export KUBECONFIG=$(pwd)/.kube/config
echo -e "\e[92mDeploying to ${{ env.ENVIRONMENT }} environment...\e[0m"
cd deploy
helmfile --color -e ${{ env.ENVIRONMENT }} apply --set image.imagePullPolicy=Always
- name: Update NGINX Proxy Manager
run: |
chmod +x $GITHUB_WORKSPACE/scripts/update-nginx
app_name=$(sed -nr 's/^name: (.*)\s*/\1/p' appspec.yaml)
export KUBECONFIG=$(pwd)/.kube/config
$GITHUB_WORKSPACE/scripts/update-nginx $app_name ${{ env.ENVIRONMENT }} https://proxymanager.fredi.au/api 80 2
21 changes: 14 additions & 7 deletions src/Barista/NCafe.Barista.Api/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine
WORKDIR /app
COPY . .
RUN dotnet publish src/Barista/NCafe.Barista.Api -c release -o out
EXPOSE 80

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

RUN apk update && apk add --upgrade apk-tools && apk upgrade --available
RUN apk add --no-cache icu-libs
RUN apk add --no-cache tzdata

RUN addgroup -S app -g 1000 \
&& adduser -S app -G app -u 1000 \
&& mkdir -p /app \
&& chown -R app:app /app

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app/out .
ENV ASPNETCORE_URLS http://*:80
ENV ASPNETCORE_ENVIRONMENT docker
COPY output .
ENTRYPOINT dotnet NCafe.Barista.Api.dll
2 changes: 2 additions & 0 deletions src/Barista/NCafe.Barista.Api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,6 @@

app.MapHub<OrderHub>("/orderHub");

app.MapGet("/healthz", () => "OK");

app.Run();
29 changes: 29 additions & 0 deletions src/Barista/NCafe.Barista.Api/appspec.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: ncafe-barista-api

ingress:
enabled: true
hosts:
- host: ncafe-barista-api-dev.fredi.au
paths:
- path: /
pathType: ImplementationSpecific

resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 350m
memory: 512Mi

environment:
- name: ConnectionStrings__EventStore
valueFromSecret: EventStoreConnectionString
- name: ConnectionStrings__RabbitMq
valueFromSecret: RabbitMqConnectionString

secrets:
EventStoreConnectionString: "{{CONNECTIONSTRINGS__EVENTSTORE}}"
RabbitMqConnectionString: "{{CONNECTIONSTRINGS__RABBITMQ}}"

replicaCount: 1

0 comments on commit 6437b42

Please sign in to comment.