-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #141 from IFRCGo/feature/helm
Feature/helm
- Loading branch information
Showing
38 changed files
with
1,948 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
name: Python check | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
push_docker_image: | ||
type: string # true or false | ||
default: "false" | ||
outputs: | ||
docker_image_name: | ||
description: "Only docker image name" | ||
value: ${{ jobs.test.outputs.docker_image_name }} | ||
docker_image_tag: | ||
description: "Only docker image tag" | ||
value: ${{ jobs.test.outputs.docker_image_tag }} | ||
docker_image: | ||
description: "docker image with tag" | ||
value: ${{ jobs.test.outputs.docker_image }} | ||
pull_request: | ||
# NOTE: For other, they should be run through helm github action ./helm-publish.yml | ||
|
||
env: | ||
COMPOSE_FILE: docker-compose.yml:gh-docker-compose.yml | ||
DJANGO_SECRET_KEY: "ci-test-insecure-django-secret-key" | ||
EMDAT_AUTHORIZATION_KEY: dummy-value | ||
IDMC_CLIENT_ID: dummy-value | ||
EOAPI_DOMAIN: https://montandon-eoapi.dummy.com | ||
|
||
jobs: | ||
pre_commit_checks: | ||
name: Pre-Commit checks | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@main | ||
with: | ||
submodules: true | ||
|
||
- uses: actions/setup-python@v5 | ||
- uses: astral-sh/setup-uv@v5 | ||
with: | ||
enable-cache: true | ||
- name: Sync | ||
run: uv sync --all-extras | ||
- uses: pre-commit/action@main | ||
|
||
test: | ||
name: Test | ||
runs-on: ubuntu-latest | ||
needs: pre_commit_checks | ||
|
||
outputs: | ||
docker_image_name: ${{ steps.prep.outputs.tagged_image_name }} | ||
docker_image_tag: ${{ steps.prep.outputs.tag }} | ||
docker_image: ${{ steps.prep.outputs.tagged_image }} | ||
|
||
steps: | ||
- uses: actions/checkout@main | ||
with: | ||
submodules: true | ||
|
||
- name: Login to GitHub Container Registry | ||
uses: docker/login-action@v3 | ||
if: ${{ inputs.push_docker_image }} | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: 🐳 Prepare Docker | ||
id: prep | ||
env: | ||
IMAGE_NAME: ghcr.io/${{ github.repository }} | ||
run: | | ||
BRANCH_NAME=$(echo $GITHUB_REF_NAME | sed 's|:|-|' | tr '[:upper:]' '[:lower:]' | sed 's/_/-/g' | cut -c1-100 | sed 's/-*$//') | ||
# XXX: Check if there is a slash in the BRANCH_NAME eg: project/add-docker | ||
if [[ "$BRANCH_NAME" == *"/"* ]]; then | ||
# XXX: Change the docker image package to -alpha | ||
IMAGE_NAME="$IMAGE_NAME-alpha" | ||
TAG="$(echo "$BRANCH_NAME" | sed 's|/|-|g').$(echo $GITHUB_SHA | head -c7)" | ||
else | ||
TAG="$BRANCH_NAME.$(echo $GITHUB_SHA | head -c7)" | ||
fi | ||
IMAGE_NAME=$(echo $IMAGE_NAME | tr '[:upper:]' '[:lower:]') | ||
echo "tagged_image_name=${IMAGE_NAME}" >> $GITHUB_OUTPUT | ||
echo "tag=${TAG}" >> $GITHUB_OUTPUT | ||
echo "tagged_image=${IMAGE_NAME}:${TAG}" >> $GITHUB_OUTPUT | ||
echo "::notice::Tagged docker image: ${IMAGE_NAME}:${TAG}" | ||
- name: 🐳 Set up Docker Buildx | ||
id: buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: 🐳 Cache Docker layers | ||
uses: actions/cache@v4 | ||
with: | ||
path: /tmp/.buildx-cache | ||
key: ${{ runner.os }}-buildx-${{ github.ref }} | ||
restore-keys: | | ||
${{ runner.os }}-buildx-refs/develop | ||
${{ runner.os }}-buildx- | ||
- name: 🐳 Build image | ||
uses: docker/build-push-action@v6 | ||
with: | ||
context: . | ||
builder: ${{ steps.buildx.outputs.name }} | ||
file: Dockerfile | ||
push: false | ||
load: true | ||
provenance: false # XXX: Without this we have untagged images in ghcr.io | ||
tags: ${{ steps.prep.outputs.tagged_image }} | ||
cache-from: type=gha | ||
cache-to: type=gha,mode=max | ||
|
||
- name: 🕮 Validate if there are no pending django migrations. | ||
env: | ||
DOCKER_IMAGE_BACKEND: ${{ steps.prep.outputs.tagged_image }} | ||
run: | | ||
docker compose run --rm web bash -c 'wait-for-it db:5432 && ./manage.py makemigrations --check --dry-run' || { | ||
echo 'There are some changes to be reflected in the migration. Make sure to run makemigrations'; | ||
exit 1; | ||
} | ||
# - name: 🤞 Run Test 🧪 & Publish coverage to code climate | ||
# env: | ||
# DOCKER_IMAGE_BACKEND: ${{ steps.prep.outputs.tagged_image }} | ||
# run: docker compose run --rm web /code/scripts/run_tests.sh | ||
|
||
- name: 🐳 Docker push | ||
if: ${{ inputs.push_docker_image }} | ||
env: | ||
DOCKER_IMAGE_BACKEND: ${{ steps.prep.outputs.tagged_image }} | ||
run: docker push $DOCKER_IMAGE_BACKEND | ||
|
||
validate_helm: | ||
name: Validate Helm | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@main | ||
|
||
- name: Install Helm | ||
uses: azure/setup-helm@v4 | ||
|
||
- name: 🐳 Helm dependency | ||
run: | | ||
yq --indent 0 '.dependencies | map(["helm", "repo", "add", .name, .repository] | join(" ")) | .[]' ./helm/Chart.lock | sh -- | ||
helm dependency build ./helm | ||
- name: 🐳 Helm lint | ||
run: helm lint ./helm --values ./helm/values-test.yaml | ||
|
||
- name: 🐳 Helm template | ||
run: helm template ./helm --values ./helm/values-test.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
name: Helm | ||
|
||
on: | ||
workflow_dispatch: | ||
# Build and push Docker image and Helm charts on every push to develop branch | ||
# and on every tag push | ||
push: | ||
branches: | ||
- develop | ||
- project/* | ||
- chore/* | ||
tags: | ||
- "**" | ||
|
||
permissions: | ||
packages: write | ||
|
||
jobs: | ||
ci: | ||
name: CI | ||
uses: ./.github/workflows/ci.yml | ||
with: | ||
push_docker_image: true | ||
|
||
build: | ||
name: Publish Helm | ||
needs: ci | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Login to GitHub Container Registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: 🐳 Helm dependency | ||
run: | | ||
yq --indent 0 '.dependencies | map(["helm", "repo", "add", .name, .repository] | join(" ")) | .[]' ./helm/Chart.lock | sh -- | ||
helm dependency build ./helm/ | ||
- name: Tag docker image in Helm Chart values.yaml | ||
env: | ||
IMAGE_NAME: ${{ needs.ci.outputs.docker_image_name }} | ||
IMAGE_TAG: ${{ needs.ci.outputs.docker_image_tag }} | ||
run: | | ||
# Update values.yaml with latest docker image | ||
sed -i "s|SET-BY-CICD-IMAGE|$IMAGE_NAME|" ./helm/values.yaml | ||
sed -i "s/SET-BY-CICD-TAG/$IMAGE_TAG/" ./helm/values.yaml | ||
- name: Package Helm Chart | ||
id: set-variables | ||
env: | ||
IMAGE_TAG: ${{ needs.ci.outputs.docker_image_tag }} | ||
run: | | ||
# XXX: Check if there is a slash in the BRANCH_NAME eg: project/add-docker | ||
if [[ "$GITHUB_REF_NAME" == *"/"* ]]; then | ||
# XXX: Change the helm chart to <chart-name>-alpha | ||
sed -i 's/^name: \(.*\)/name: \1-alpha/' ./helm/Chart.yaml | ||
fi | ||
sed -i "s/SET-BY-CICD/$IMAGE_TAG/g" ./helm/Chart.yaml | ||
helm package ./helm/ -d ./helm/.helm-charts | ||
- name: Push Helm Chart | ||
env: | ||
IMAGE: ${{ needs.ci.outputs.docker_image }} | ||
OCI_REPO: oci://ghcr.io/${{ github.repository }} | ||
run: | | ||
OCI_REPO=$(echo $OCI_REPO | tr '[:upper:]' '[:lower:]') | ||
PACKAGE_FILE=$(ls ./helm/.helm-charts/*.tgz | head -n 1) | ||
echo "# Helm Chart" >> $GITHUB_STEP_SUMMARY | ||
echo "" >> $GITHUB_STEP_SUMMARY | ||
echo "Tagged Image: **$IMAGE**" >> $GITHUB_STEP_SUMMARY | ||
echo "" >> $GITHUB_STEP_SUMMARY | ||
echo "Helm push output" >> $GITHUB_STEP_SUMMARY | ||
echo "" >> $GITHUB_STEP_SUMMARY | ||
echo '```bash' >> $GITHUB_STEP_SUMMARY | ||
helm push "$PACKAGE_FILE" $OCI_REPO 2>> $GITHUB_STEP_SUMMARY | ||
echo '```' >> $GITHUB_STEP_SUMMARY |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
import json | ||
import logging | ||
|
||
import requests | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import logging | ||
|
||
from django.conf import settings | ||
from django.core.management.base import BaseCommand | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class Command(BaseCommand): | ||
help = "Load data to stac api" | ||
|
||
def handle(self, *args, **options): | ||
# NOTE: Make sure to adjust helm values `localCacheVolume.size` according to fetched data size | ||
# TODO: Add logic to pull data as required | ||
print(f"Data will be loaded to directory: {settings.LOCAL_CACHE_DATA_DIR}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.