Skip to content

feat: resolves #233 & #234 (#235) #835

feat: resolves #233 & #234 (#235)

feat: resolves #233 & #234 (#235) #835

Workflow file for this run

name: workflows starter
# env: is empty, see setup-env and the outputs there
on:
push: {}
workflow_dispatch: {}
jobs:
setup_workflow_env:
runs-on: ubuntu-latest
# Optionally specify the environment that should be used on this branch
# environment: review/dev
outputs:
# It seems you have to specify the environment twice (passed to reusable workflow)
# as there is no way yet to get the active environment
# environment: review/dev
# or see the switch on ref_name script below
environment: ${{ steps.get_environment_from_git_ref.outputs.environment }}
environment_short: ${{ steps.get_environment_from_git_ref.outputs.environment_short }}
image_name: nuxt-vicav
registry_root: ghcr.io/${{ github.repository }}/
default_port: "3000"
fetch-depth: 10
submodules: "false"
APP_NAME: nuxt-vicav
# This together with the branch name is also used as the namespace to deploy to
APP_ROOT: "/"
herokuish_base_image: ghcr.io/acdh-oeaw/herokuish-for-cypress/main:latest-22
# You should not need to have to change anything below this line
#-----------------------------------------------------------------------------------------------------
steps:
- name: Get environment from git ref
id: get_environment_from_git_ref
run: |
echo "Running on branch ${{ github.ref_name }}"
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
echo "environment=production"
echo "environment=production" >> $GITHUB_OUTPUT
echo "environment_short=prod" >> $GITHUB_OUTPUT
elif [ "${{ github.ref_name }}" = "tunocent" ]; then
echo "environment=tuncoent"
echo "environment=tunocent" >> $GITHUB_OUTPUT
echo "environment_short=tunocent" >> $GITHUB_OUTPUT
else
echo "environment=review/${{ github.ref_name }}"
echo "environment=review/${{ github.ref_name }}" >> $GITHUB_OUTPUT
echo "environment_short=$(echo -n ${{ github.ref_name }} | sed 's/\(feat\(ure\)\{0,1\}\|fix\|chore\|perf\|refactor\|style\|test\)[_/]//' | tr '_' '-' | tr '[:upper:]' '[:lower:]' | cut -c -48 )" >> $GITHUB_OUTPUT
fi
generate_workflow_vars:
needs: [setup_workflow_env]
environment:
name: ${{ needs.setup_workflow_env.outputs.environment }}
runs-on: ubuntu-latest
steps:
- name: Generate PUBLIC_URL if not set
id: generate_public_url
run: |
kube_ingress_base_domain="${{ vars.KUBE_INGRESS_BASE_DOMAIN }}"
public_url="${{ needs.setup_workflow_env.outputs.PUBLIC_URL || vars.PUBLIC_URL }}"
if [ "${public_url}x" == 'x' ]
then public_url=https://${{ needs.setup_workflow_env.outputs.environment_short }}.${kube_ingress_base_domain}
fi
echo "public_url=$public_url" >> $GITHUB_OUTPUT
- name: Populate environment variables from template environment
id: populate_env_vars
if: ${{ github.ref_name != 'main' }}
# A fine grained personal access token needs to be set on repository level
# This token needs to have the following permissions:
# - "Variables" repository permissions (write)
# - "Environments" repository permissions (write)
env:
GH_PROMPT_DISABLED: "true"
GH_TOKEN: ${{ secrets.ENVIRONMENT_WRITE_TOKEN}}
ref_name: ${{ github.ref_name }}
template_ref_name: develop
run: |
# This was refactored using CoPilot
fetch_gh_env_vars() {
local environment=$1
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
-q '.variables[]|select(.name|startswith("SERVICE_ID") or startswith("K8S_SECRET_"))|delpaths([["created_at"],["updated_at"]])'
}
post_var_as_json_to_env() {
local var=$1
local environment=$2
echo -n $var | gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
--input -
}
if [ "$GH_TOKEN"x != 'x' ]
then
VARS_TEMPLATE=$(fetch_gh_env_vars "review%2F${{ env.template_ref_name}}")
if [ "$(fetch_gh_env_vars "review%2F${{ env.ref_name }}")"x = "x" ]
then
for var in $VARS_TEMPLATE
do
post_var_as_json_to_env "$var" "review%2F${{ env.ref_name }}"
done
fi
fi
outputs:
environment: ${{ needs.setup_workflow_env.outputs.environment }}
environment_short: ${{ needs.setup_workflow_env.outputs.environment_short }}
PUBLIC_URL: ${{ steps.generate_public_url.outputs.public_url }}
APP_NAME: ${{ needs.setup_workflow_env.outputs.APP_NAME }}
generate_workflow_vars_shawi:
needs: [setup_workflow_env]
environment:
name: ${{ needs.setup_workflow_env.outputs.environment }}-shawi
runs-on: ubuntu-latest
steps:
- name: Generate PUBLIC_URL if not set
id: generate_public_url
run: |
kube_ingress_base_domain="${{ vars.KUBE_INGRESS_BASE_DOMAIN }}"
public_url="${{ needs.setup_workflow_env.outputs.PUBLIC_URL || vars.PUBLIC_URL }}"
if [ "${public_url}x" == 'x' ]
then public_url=https://shawi-${{ needs.setup_workflow_env.outputs.environment_short }}.${kube_ingress_base_domain}
fi
echo "public_url=$public_url" >> $GITHUB_OUTPUT
- name: Populate environment variables from template environment
id: populate_env_vars
if: ${{ github.ref_name != 'main' }}
# A fine grained personal access token needs to be set on repository level
# This token needs to have the following permissions:
# - "Variables" repository permissions (write)
# - "Environments" repository permissions (write)
env:
GH_PROMPT_DISABLED: "true"
GH_TOKEN: ${{ secrets.ENVIRONMENT_WRITE_TOKEN}}
ref_name: ${{ github.ref_name }}-shawi
template_ref_name: develop-shawi
run: |
# This was refactored using CoPilot
fetch_gh_env_vars() {
local environment=$1
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
-q '.variables[]|select(.name|startswith("SERVICE_ID") or startswith("K8S_SECRET_"))|delpaths([["created_at"],["updated_at"]])'
}
post_var_as_json_to_env() {
local var=$1
local environment=$2
echo -n $var | gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
--input -
}
if [ "$GH_TOKEN"x != 'x' ]
then
VARS_TEMPLATE=$(fetch_gh_env_vars "review%2F${{ env.template_ref_name}}")
if [ "$(fetch_gh_env_vars "review%2F${{ env.ref_name }}")"x = "x" ]
then
for var in $VARS_TEMPLATE
do
post_var_as_json_to_env "$var" "review%2F${{ env.ref_name }}"
done
fi
fi
outputs:
environment: ${{ needs.setup_workflow_env.outputs.environment }}-shawi
environment_short: shawi-${{ needs.setup_workflow_env.outputs.environment_short }}
PUBLIC_URL: ${{ steps.generate_public_url.outputs.public_url }}
APP_NAME: ${{ needs.setup_workflow_env.outputs.APP_NAME }}
generate_workflow_vars_tunocent:
needs: [setup_workflow_env]
environment:
name: ${{ needs.setup_workflow_env.outputs.environment }}-tunocent
runs-on: ubuntu-latest
steps:
- name: Generate PUBLIC_URL if not set
id: generate_public_url
run: |
kube_ingress_base_domain="${{ vars.KUBE_INGRESS_BASE_DOMAIN }}"
public_url="${{ needs.setup_workflow_env.outputs.PUBLIC_URL || vars.PUBLIC_URL }}"
if [ "${public_url}x" == 'x' ]
then public_url=https://tunocent-${{ needs.setup_workflow_env.outputs.environment_short }}.${kube_ingress_base_domain}
fi
echo "public_url=$public_url" >> $GITHUB_OUTPUT
- name: Populate environment variables from template environment
id: populate_env_vars
if: ${{ github.ref_name != 'main' }}
# A fine grained personal access token needs to be set on repository level
# This token needs to have the following permissions:
# - "Variables" repository permissions (write)
# - "Environments" repository permissions (write)
env:
GH_PROMPT_DISABLED: "true"
GH_TOKEN: ${{ secrets.ENVIRONMENT_WRITE_TOKEN}}
ref_name: ${{ github.ref_name }}-tunocent
template_ref_name: develop-tunocent
run: |
# This was refactored using CoPilot
fetch_gh_env_vars() {
local environment=$1
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
-q '.variables[]|select(.name|startswith("SERVICE_ID") or startswith("K8S_SECRET_"))|delpaths([["created_at"],["updated_at"]])'
}
post_var_as_json_to_env() {
local var=$1
local environment=$2
echo -n $var | gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
--input -
}
if [ "$GH_TOKEN"x != 'x' ]
then
VARS_TEMPLATE=$(fetch_gh_env_vars "review%2F${{ env.template_ref_name}}")
if [ "$(fetch_gh_env_vars "review%2F${{ env.ref_name }}")"x = "x" ]
then
for var in $VARS_TEMPLATE
do
post_var_as_json_to_env "$var" "review%2F${{ env.ref_name }}"
done
fi
fi
outputs:
environment: ${{ needs.setup_workflow_env.outputs.environment }}-tunocent
environment_short: tunocent-${{ needs.setup_workflow_env.outputs.environment_short }}
PUBLIC_URL: ${{ steps.generate_public_url.outputs.public_url }}
APP_NAME: ${{ needs.setup_workflow_env.outputs.APP_NAME }}
generate_workflow_vars_wibarab:
needs: [setup_workflow_env]
environment:
name: ${{ needs.setup_workflow_env.outputs.environment }}-wibarab
runs-on: ubuntu-latest
steps:
- name: Generate PUBLIC_URL if not set
id: generate_public_url
run: |
kube_ingress_base_domain="${{ vars.KUBE_INGRESS_BASE_DOMAIN }}"
public_url="${{ needs.setup_workflow_env.outputs.PUBLIC_URL || vars.PUBLIC_URL }}"
if [ "${public_url}x" == 'x' ]
then public_url=https://wibarab-${{ needs.setup_workflow_env.outputs.environment_short }}.${kube_ingress_base_domain}
fi
echo "public_url=$public_url" >> $GITHUB_OUTPUT
- name: Populate environment variables from template environment
id: populate_env_vars
if: ${{ github.ref_name != 'main' }}
# A fine grained personal access token needs to be set on repository level
# This token needs to have the following permissions:
# - "Variables" repository permissions (write)
# - "Environments" repository permissions (write)
env:
GH_PROMPT_DISABLED: "true"
GH_TOKEN: ${{ secrets.ENVIRONMENT_WRITE_TOKEN}}
ref_name: ${{ github.ref_name }}-wibarab
template_ref_name: develop-wibarab
run: |
# This was refactored using CoPilot
fetch_gh_env_vars() {
local environment=$1
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
-q '.variables[]|select(.name|startswith("SERVICE_ID") or startswith("K8S_SECRET_"))|delpaths([["created_at"],["updated_at"]])'
}
post_var_as_json_to_env() {
local var=$1
local environment=$2
echo -n $var | gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/environments/${environment}/variables \
--input -
}
if [ "$GH_TOKEN"x != 'x' ]
then
VARS_TEMPLATE=$(fetch_gh_env_vars "review%2F${{ env.template_ref_name}}")
if [ "$(fetch_gh_env_vars "review%2F${{ env.ref_name }}")"x = "x" ]
then
for var in $VARS_TEMPLATE
do
post_var_as_json_to_env "$var" "review%2F${{ env.ref_name }}"
done
fi
fi
outputs:
environment: ${{ needs.setup_workflow_env.outputs.environment }}-wibarab
environment_short: wibarab-${{ needs.setup_workflow_env.outputs.environment_short }}
PUBLIC_URL: ${{ steps.generate_public_url.outputs.public_url }}
APP_NAME: ${{ needs.setup_workflow_env.outputs.APP_NAME }}
_1:
needs:
[
setup_workflow_env,
generate_workflow_vars,
generate_workflow_vars_wibarab,
generate_workflow_vars_tunocent,
generate_workflow_vars_shawi,
]
uses: acdh-oeaw/gl-autodevops-minimal-port/.github/workflows/build-herokuish-and-push-to-registry.yaml@main
secrets: inherit
# if you run this outside of of an org that provides KUBE_CONFIG etc as a secret, you need to specify every secret you want to pass by name
with:
environment: ${{ needs.generate_workflow_vars.outputs.environment }}
registry_root: ${{ needs.setup_workflow_env.outputs.registry_root }}
image_name: ${{ needs.setup_workflow_env.outputs.image_name }}
default_port: ${{ needs.setup_workflow_env.outputs.default_port }}
PUBLIC_URL: ${{ needs.generate_workflow_vars.outputs.PUBLIC_URL }}
fetch-depth: ${{ fromJson(needs.setup_workflow_env.outputs.fetch-depth) }}
submodules: ${{ needs.setup_workflow_env.outputs.submodules }}
_2:
needs: [setup_workflow_env, generate_workflow_vars]
uses: acdh-oeaw/gl-autodevops-minimal-port/.github/workflows/herokuish-tests-db-url.yaml@main
secrets: inherit
# if you run this outside of acdh-oeaw yo uneed to specify every secret you want to pass by name
with:
environment: ${{ needs.setup_workflow_env.outputs.environment}}
registry_root: ${{ needs.setup_workflow_env.outputs.registry_root }}
image_name: ${{ needs.setup_workflow_env.outputs.image_name }}
default_port: ${{ needs.setup_workflow_env.outputs.default_port }}
fetch-depth: ${{ fromJson(needs.setup_workflow_env.outputs.fetch-depth) }}
herokuish_base_image: ${{ needs.setup_workflow_env.outputs.herokuish_base_image }}
PUBLIC_URL: ${{ needs.generate_workflow_vars.outputs.PUBLIC_URL }}
submodules: ${{ needs.setup_workflow_env.outputs.submodules }}
_3:
needs: [setup_workflow_env, generate_workflow_vars, _1, _2]
uses: acdh-oeaw/gl-autodevops-minimal-port/.github/workflows/deploy.yml@main
secrets: inherit
with:
environment: ${{ needs.generate_workflow_vars.outputs.environment}}
fetch-depth: ${{ fromJson(needs.setup_workflow_env.outputs.fetch-depth) }}
DOCKER_TAG:
${{ needs.setup_workflow_env.outputs.registry_root }}${{
needs.setup_workflow_env.outputs.image_name }}
APP_NAME:
${{ needs.generate_workflow_vars.outputs.APP_NAME }}-${{
needs.generate_workflow_vars.outputs.environment_short }}
APP_ROOT: ${{ needs.setup_workflow_env.outputs.APP_ROOT }}
PUBLIC_URL: ${{ needs.generate_workflow_vars.outputs.PUBLIC_URL }}
do_not_generate_additional_host_names: "true"
POSTGRES_ENABLED: ${{ needs.setup_workflow_env.outputs.POSTGRES_ENABLED == 'true'}}
default_port: "${{ needs.setup_workflow_env.outputs.default_port}}"
submodules: ${{ needs.setup_workflow_env.outputs.submodules }}
_3-shawi:
needs: [setup_workflow_env, generate_workflow_vars_shawi, _1, _2]
uses: acdh-oeaw/gl-autodevops-minimal-port/.github/workflows/deploy.yml@main
secrets: inherit
with:
environment: ${{ needs.generate_workflow_vars_shawi.outputs.environment}}
fetch-depth: ${{ fromJson(needs.setup_workflow_env.outputs.fetch-depth) }}
DOCKER_TAG:
${{ needs.setup_workflow_env.outputs.registry_root }}${{
needs.setup_workflow_env.outputs.image_name }}
APP_NAME:
${{ needs.generate_workflow_vars_shawi.outputs.APP_NAME }}-${{
needs.generate_workflow_vars_shawi.outputs.environment_short }}
APP_ROOT: ${{ needs.setup_workflow_env.outputs.APP_ROOT }}
PUBLIC_URL: ${{ needs.generate_workflow_vars_shawi.outputs.PUBLIC_URL }}
do_not_generate_additional_host_names: "true"
POSTGRES_ENABLED: ${{ needs.setup_workflow_env.outputs.POSTGRES_ENABLED == 'true'}}
default_port: "${{ needs.setup_workflow_env.outputs.default_port}}"
submodules: ${{ needs.setup_workflow_env.outputs.submodules }}
_3-tunocent:
needs: [setup_workflow_env, generate_workflow_vars_tunocent, _1, _2]
uses: acdh-oeaw/gl-autodevops-minimal-port/.github/workflows/deploy.yml@main
secrets: inherit
with:
environment: ${{ needs.generate_workflow_vars_tunocent.outputs.environment}}
fetch-depth: ${{ fromJson(needs.setup_workflow_env.outputs.fetch-depth) }}
DOCKER_TAG:
${{ needs.setup_workflow_env.outputs.registry_root }}${{
needs.setup_workflow_env.outputs.image_name }}
APP_NAME:
${{ needs.generate_workflow_vars_tunocent.outputs.APP_NAME }}-${{
needs.generate_workflow_vars_tunocent.outputs.environment_short }}
APP_ROOT: ${{ needs.setup_workflow_env.outputs.APP_ROOT }}
PUBLIC_URL: ${{ needs.generate_workflow_vars_tunocent.outputs.PUBLIC_URL }}
do_not_generate_additional_host_names: "true"
POSTGRES_ENABLED: ${{ needs.setup_workflow_env.outputs.POSTGRES_ENABLED == 'true'}}
default_port: "${{ needs.setup_workflow_env.outputs.default_port}}"
submodules: ${{ needs.setup_workflow_env.outputs.submodules }}
_3-wibarab:
needs: [setup_workflow_env, generate_workflow_vars_wibarab, _1, _2]
uses: acdh-oeaw/gl-autodevops-minimal-port/.github/workflows/deploy.yml@main
secrets: inherit
with:
environment: ${{ needs.generate_workflow_vars_wibarab.outputs.environment}}
fetch-depth: ${{ fromJson(needs.setup_workflow_env.outputs.fetch-depth) }}
DOCKER_TAG:
${{ needs.setup_workflow_env.outputs.registry_root }}${{
needs.setup_workflow_env.outputs.image_name }}
APP_NAME:
${{ needs.generate_workflow_vars_wibarab.outputs.APP_NAME }}-${{
needs.generate_workflow_vars_wibarab.outputs.environment_short }}
APP_ROOT: ${{ needs.setup_workflow_env.outputs.APP_ROOT }}
PUBLIC_URL: ${{ needs.generate_workflow_vars_wibarab.outputs.PUBLIC_URL }}
do_not_generate_additional_host_names: "true"
POSTGRES_ENABLED: ${{ needs.setup_workflow_env.outputs.POSTGRES_ENABLED == 'true'}}
default_port: "${{ needs.setup_workflow_env.outputs.default_port}}"
submodules: ${{ needs.setup_workflow_env.outputs.submodules }}