Skip to content

authentication documentation added (#10) #1

authentication documentation added (#10)

authentication documentation added (#10) #1

Workflow file for this run

name: Deployment Workflow
env:
APP_NAME: app-server
IMAGE_NAME: ${{ secrets.DOCKER_REGISTRY }}/app-server
on:
push:
branches:
- main
- development
- 'release-*'
- 'hotfix**'
tags:
- 'dev-*'
jobs:
Setup:
runs-on: ubuntu-latest
outputs:
environment_name: ${{ steps.set_env.outputs.environment }}
steps:
- name: Determine Environment
id: set_env
run: |
if [[ $GITHUB_REF == refs/tags/dev-* ]]; then
echo "::set-output name=environment::dev"
elif [[ $GITHUB_REF == refs/heads/development ]]; then
echo "::set-output name=environment::beta"
elif [[ $GITHUB_REF == refs/heads/release* ]] || [[ $GITHUB_REF == refs/heads/hotfix* ]]; then
echo "::set-output name=environment::uat"
elif [[ $GITHUB_REF == refs/heads/main ]]; then
echo "::set-output name=environment::prod"
else
echo "::set-output name=environment::default"
fi
env:
GITHUB_REF: ${{ github.ref }}
Build:
needs: Setup
environment:
name: ${{ needs.Setup.outputs.environment_name }}
runs-on: self-hosted-staging
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set the IMAGE env variable
run: echo "IMAGE=${{ env.IMAGE_NAME }}:$(echo ${{ github.ref_name }}-${{ github.sha }} | tr '. - /\' '_' )" >> $GITHUB_ENV
- name: Set vault configuration
run: |
sed -i 's|VAULT_HOST|'"${{ vars.VAULT_HOST }}"'|g' ./deployments/config.yml
sed -i 's|VAULT_TOKEN|'"${{ secrets.VAULT_TOKEN }}"'|g' ./deployments/config.yml
sed -i 's|VAULT_BACKEND|'"${{ vars.VAULT_BACKEND }}"'|g' ./deployments/config.yml
- name: Set application's env and app_url to config file
run: |
if [[ "${{github.ref}}" == "refs/tags/dev-"* ]]; then
sed -i 's|APP_URL|'"${{ vars.APP_URL }}/${{github.ref_name}}"'|g' ./deployments/config.yml
sed -i 's|ENVIRONMENT|'"${{ github.ref_name }}"'|g' ./deployments/config.yml
else
sed -i 's|APP_URL|'"${{ vars.APP_URL }}"'|g' ./deployments/config.yml
sed -i 's|ENVIRONMENT|'"${{ needs.Setup.outputs.environment_name }}"'|g' ./deployments/config.yml
fi
- name: Set elastic apm configuration
run: |
sed -i 's|ELASTIC_APM_SERVER_URL|'"${{ secrets.ELASTIC_APM_SERVER_URL }}"'|g' ./src/base/apm.ts
sed -i 's|ELASTIC_APM_ENABLED|'"${{ vars.ELASTIC_APM_ENABLED }}"'|g' ./src/base/apm.ts
if [[ "${{github.ref}}" == "refs/tags/dev-"* ]]; then
sed -i 's|ENVIRONMENT|'"${{ github.ref_name }}"'|g' ./src/base/apm.ts
else
sed -i 's|ENVIRONMENT|'"${{ needs.Setup.outputs.environment_name }}"'|g' ./src/base/apm.ts
fi
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Build
run: docker build . -t ${{ env.IMAGE }}
- name: Docker push
run: docker push ${{ env.IMAGE }}
Deploy-Dev:
needs: Build
runs-on: self-hosted-staging
environment: dev
if: startsWith(github.ref, 'refs/tags/dev-')
env:
RUNNER_WORKING_DIR: /opt/back-end/dev/
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set the IMAGE env variable
run: echo "IMAGE=${{ env.IMAGE_NAME }}:$(echo ${{ github.ref_name }}-${{ github.sha }} | tr '. - /\' '_' )" >> $GITHUB_ENV
- name: Set the APP_STACK_NAME environment variable
run: echo "APP_STACK_NAME=$(echo ${{env.APP_NAME}}-${{github.ref_name}} | tr . - | cut -d/ -f2 )" >> $GITHUB_ENV
- name: Set the COMPOSE_FILE_NAME_PATH environment variable
run: echo "COMPOSE_FILE_NAME_PATH=${{ env.RUNNER_WORKING_DIR }}${{ github.ref_name }}/docker-compose-dev.yml" >> $GITHUB_ENV
- name: Create SubDirectory
run: mkdir -p ${{ env.RUNNER_WORKING_DIR }}${{ github.ref_name }}/
- name: Copy Docker Compose file
run: |
cp .deploy/docker-compose-dev.yml ${{ env.RUNNER_WORKING_DIR }}${{ github.ref_name }}/
cp ${{ env.RUNNER_WORKING_DIR }}.env ${{ env.RUNNER_WORKING_DIR }}${{ github.ref_name }}/
- name: Replace PlaceHolders
run: |
sed -i 's|__IMAGE__|'"${{ env.IMAGE }}"'|g' ${{env.COMPOSE_FILE_NAME_PATH}}
sed -i 's|__VERSION__|'"${{ github.ref_name }}"'|g' ${{env.COMPOSE_FILE_NAME_PATH}}
sed -i 's|__VERSION__|'"${{ github.ref_name }}"'|g' ${{ env.RUNNER_WORKING_DIR }}${{ github.ref_name }}/.env
sed -i 's|__APP_STACK_NAME__|'"${{ env.APP_STACK_NAME }}"'|g' ${{env.COMPOSE_FILE_NAME_PATH}}
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Deploy Stack
run: |
docker stack deploy -c ${{env.COMPOSE_FILE_NAME_PATH}} ${{env.APP_STACK_NAME}} --with-registry-auth
Deploy-Beta:
needs: Build
runs-on: self-hosted-staging
environment: beta
if: github.ref == 'refs/heads/development'
env:
RUNNER_WORKING_DIR: /opt/back-end/beta/
COMPOSE_FILE_NAME_PATH: /opt/back-end/beta/docker-compose-beta.yml
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set the IMAGE env variable
run: echo "IMAGE=${{ env.IMAGE_NAME }}:$(echo ${{ github.ref_name }}-${{ github.sha }} | tr '. - /\' '_' )" >> $GITHUB_ENV
- name: Set the APP_STACK_NAME environment variable
run: echo "APP_STACK_NAME=${{ env.APP_NAME }}-beta" >> $GITHUB_ENV
- name: Copy Docker Compose file
run: cp .deploy/docker-compose-beta.yml ${{ env.RUNNER_WORKING_DIR }}
- name: Replace placeholders
run: |
sed -i 's|__IMAGE__|'"${{ env.IMAGE }}"'|g' ${{ env.COMPOSE_FILE_NAME_PATH }}
sed -i 's|__APP_STACK_NAME__|'"${{ env.APP_STACK_NAME }}"'|g' ${{ env.COMPOSE_FILE_NAME_PATH }}
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Deploy Stack
run: docker stack deploy -c ${{ env.COMPOSE_FILE_NAME_PATH }} ${APP_STACK_NAME} --with-registry-auth
Deploy-UAT:
needs: Build
runs-on: self-hosted-staging
environment: uat
if: startsWith(github.ref_name, 'release') || startsWith(github.ref_name, 'hotfix') && github.ref_type == 'branch'
env:
RUNNER_WORKING_DIR: /opt/back-end/uat/
COMPOSE_FILE_NAME_PATH: /opt/back-end/uat/docker-compose-uat.yml
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set the APP_STACK_NAME environment variable
run: echo "APP_STACK_NAME=${{ env.APP_NAME }}-uat" >> $GITHUB_ENV
- name: Set the IMAGE env variable
run: echo "IMAGE=${{ env.IMAGE_NAME }}:$(echo ${{ github.ref_name }}-${{ github.sha }} | tr '. - /\' '_' )" >> $GITHUB_ENV
- name: Copy Docker Compose file
run: cp .deploy/docker-compose-uat.yml ${{ env.RUNNER_WORKING_DIR }}
- name: Replace placeholders
run: |
sed -i 's|__IMAGE__|'"${{ env.IMAGE }}"'|g' ${{ env.COMPOSE_FILE_NAME_PATH }}
sed -i 's|__APP_STACK_NAME__|'"${{ env.APP_STACK_NAME }}"'|g' ${{ env.COMPOSE_FILE_NAME_PATH }}
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Deploy
run: docker stack deploy -c ${{ env.COMPOSE_FILE_NAME_PATH }} ${APP_STACK_NAME} --with-registry-auth
Deploy-Production:
needs: Build
runs-on: self-hosted-production
environment: prod
if: startsWith(github.ref_name, 'main') && github.ref_type == 'branch'
env:
RUNNER_WORKING_DIR: /opt/back-end/
COMPOSE_FILE_NAME_PATH: /opt/back-end/docker-compose-prod.yml
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set the IMAGE env variable
run: echo "IMAGE=${{ env.IMAGE_NAME }}:$(echo ${{ github.ref_name }}-${{ github.sha }} | tr '. - /\' '_' )" >> $GITHUB_ENV
- name: Copy Docker Compose file
run: cp .deploy/docker-compose-prod.yml ${{env.RUNNER_WORKING_DIR}}
- name: Replace placeholders
run: sed -i 's|__IMAGE__|'"${{ env.IMAGE }}"'|g' ${{ env.COMPOSE_FILE_NAME_PATH }}
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Deploy
run: docker stack deploy -c ${{ env.COMPOSE_FILE_NAME_PATH }} ${{env.APP_NAME}} --with-registry-auth