diff --git a/.gitea/workflows/new-service.yml b/.gitea/workflows/add-new-service.yml similarity index 100% rename from .gitea/workflows/new-service.yml rename to .gitea/workflows/add-new-service.yml diff --git a/.gitea/workflows/deploy-bin.yml b/.gitea/workflows/deploy-bin.yml index 22f1d97..61e6a9c 100644 --- a/.gitea/workflows/deploy-bin.yml +++ b/.gitea/workflows/deploy-bin.yml @@ -4,6 +4,9 @@ on: push: branches: - main + tags: + - 'prod' + - 'v*' # paths: # - 'bin/**' @@ -15,8 +18,8 @@ jobs: working-directory: ./bin env: - # TODO: prod/dev - DEST_DIR: /sls/bd/hla/dev/bin + # commit tagged ? yes->prod : no->dev + DEST_DIR: /sls/bd/hla/${{ github.ref_type == 'tag' && 'prod' || 'dev' }}/bin steps: - name: Checkout repository diff --git a/.gitea/workflows/deploy-build-restart-service.yml b/.gitea/workflows/deploy-build-restart-service.yml new file mode 100644 index 0000000..0582215 --- /dev/null +++ b/.gitea/workflows/deploy-build-restart-service.yml @@ -0,0 +1,80 @@ +name: Deploy, build and restart a service + +on: + push: + # TODO: if someone tags 'prod' to a (broken) feature branch + # this still triggers (and deploys to prod). + branches: + - main + tags: + - 'prod' + - 'v*' + +jobs: + deploy: + runs-on: hla-dev + + env: + # commit tagged ? yes->prod : no->dev + AGEBD_ENV: ${{ github.ref_type == 'tag' && 'prod' || 'dev' }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # - name: Copy files and replace {{ agebd_env }} with dev or prod + # run: | + # mkdir -p ${SVC_CURRRENT_DIR} + # cp -r 000-master/* ${SVC_CURRRENT_DIR} + # sed -i 's/{{ agebd_env }}/${AGEBD_ENV}/g' ${SVC_CURRRENT_DIR}/systemd/AGEBD-SERVICE-MASTER.service + + # - name: Create Python venv + # run: | + # cd ${SVC_CURRRENT_DIR}/app + # uv venv --allow-existing --system-site-packages .venv + # uv sync + + # - name: Restart Service + # run: | + # export XDG_RUNTIME_DIR=/run/user/$(id -u) + # systemctl --user daemon-reload + # systemctl --user enable --force ${SVC_CURRRENT_DIR}/systemd/AGEBD-SERVICE-MASTER.service + # systemctl --user restart AGEBD-SERVICE-MASTER.service + + - name: Detect and Deploy Changed Services + run: | + # 1. Identify which directories under 'services/' changed in this push + CHANGED_DIRS=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep "^services/" | awk -F/ '{print $2}' | sort -u) + + if [ -z "$CHANGED_DIRS" ]; then + echo "No service files changed. Skipping deployment." + exit 0 + fi + + # 2. Set up environment + export XDG_RUNTIME_DIR=/run/user/$(id -u) + + # 3. Loop and deploy ONLY the changed services + for SERVICE in $CHANGED_DIRS; do + echo "Deploying detected changes for: $SERVICE" + + SVC_CURRENT_DIR="/sls/bd/hla/${AGEBD_ENV}/services/${SERVICE}/current" + + # Run your standard deployment blocks dynamically targeting $SERVICE + mkdir -p ${SVC_CURRENT_DIR} + cp -r services/${SERVICE}/* ${SVC_CURRENT_DIR} + + # Build python venv + cd ${SVC_CURRRENT_DIR}/app + uv venv --allow-existing --system-site-packages .venv + uv sync + + # Uppercase service name for systemd conversion, skip first 4 chars, then upper (000-master -> MASTER) + SVC_UPPER=$(echo "${SERVICE:4}" | tr '[:lower:]' '[:upper:]') + + sed -i "s/{{ agebd_env }}/${AGEBD_ENV}/g" ${SVC_CURRENT_DIR}/systemd/AGEBD-SERVICE-${SVC_UPPER}.service + + systemctl --user daemon-reload + systemctl --user enable --force ${SVC_CURRENT_DIR}/systemd/AGEBD-SERVICE-${SVC_UPPER}.service + systemctl --user restart AGEBD-SERVICE-${SVC_UPPER}.service + done \ No newline at end of file diff --git a/.gitea/workflows/deploy-py-agebd.yml b/.gitea/workflows/deploy-py-agebd.yml index f55597b..dbdc4f5 100644 --- a/.gitea/workflows/deploy-py-agebd.yml +++ b/.gitea/workflows/deploy-py-agebd.yml @@ -5,8 +5,11 @@ on: push: branches: - main - paths: - - 'packages/agebd/**' + tags: + - 'prod' + - 'v*' +# paths: +# - 'packages/agebd/**' jobs: deploy: @@ -16,8 +19,8 @@ jobs: working-directory: ./packages/agebd env: - # TODO: prod/dev - DEST_DIR: /sls/bd/hla/dev/packages/agebd + # commit tagged ? yes->prod : no->dev + DEST_DIR: /sls/bd/hla/${{ github.ref_type == 'tag' && 'prod' || 'dev' }}/packages/agebd steps: - name: Checkout repository diff --git a/.gitea/workflows/deploy-service.yml b/.gitea/workflows/deploy-service.yml deleted file mode 100644 index 2d13acb..0000000 --- a/.gitea/workflows/deploy-service.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Deploy service MASTER - -on: - push: - # TODO: if someone tags 'prod' to a (broken) feature branch - # this still triggers (and deploys to prod). - branches: - - main - tags: - - 'prod' - - 'v*' - # paths: - # - 'services/000-master/**' - -jobs: - deploy: - runs-on: hla-dev - defaults: - run: - working-directory: ./services - - env: - # commit tagged ? yes->prod : no->dev - AGEBD_ENV: ${{ github.ref_type == 'tag' && 'prod' || 'dev' }} - SVC_CURRRENT_DIR: /sls/bd/hla/${{ github.ref_type == 'tag' && 'prod' || 'dev' }}/services/000-master/current - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Copy files and replace {{ agebd_env }} with dev or prod - run: | - mkdir -p ${SVC_CURRRENT_DIR} - cp -r 000-master/* ${SVC_CURRRENT_DIR} - sed -i 's/{{ agebd_env }}/dev/g' ${SVC_CURRRENT_DIR}/systemd/AGEBD-SERVICE-MASTER.service - - - name: Create Python venv - run: | - cd ${SVC_CURRRENT_DIR}/app - uv venv --allow-existing --system-site-packages .venv - uv sync - - - name: Restart Service - run: | - export XDG_RUNTIME_DIR=/run/user/$(id -u) - systemctl --user daemon-reload - systemctl --user enable --force ${SVC_CURRRENT_DIR}/systemd/AGEBD-SERVICE-MASTER.service - systemctl --user restart AGEBD-SERVICE-MASTER.service diff --git a/ansible/add-new-service.yml b/ansible/add-new-service.yml index 488548e..0b7dc38 100644 --- a/ansible/add-new-service.yml +++ b/ansible/add-new-service.yml @@ -2,10 +2,4 @@ # being installed on machine. - name: Restart Master IOC - import_playbook: plays/restart-master-ioc.yml - -- name: Phase 2 - Provision and Render New Services - import_playbook: plays/provision_services.yml - -- name: Phase 3 - Restart and Verify IOCs - import_playbook: plays/restart_iocs.yml \ No newline at end of file + import_playbook: plays/restart-master-ioc.yml \ No newline at end of file