Skip to content

Deploy

Deploy #16

Workflow file for this run

name: Deploy
on:
workflow_dispatch:
schedule:
- cron: "0 12 * * *"
concurrency:
group: pipeline
cancel-in-progress: false
jobs:
deploy:
runs-on: [self-hosted, Linux, X64, cfde]
permissions:
contents: read
steps:
- name: Show runner context
run: |
set -euo pipefail
hostname
whoami
docker --version
docker compose version
- name: Update repo on VM
working-directory: /srv/projects/icc-eval-core
run: |
set -euo pipefail
git pull
- name: Re-build images
timeout-minutes: 15
working-directory: /srv/projects/icc-eval-core
run: |
set -euo pipefail
./run_stack.sh build
./run_stack.sh --profile pipeline build
- name: Run pipeline in Compose stack
timeout-minutes: 30
working-directory: /srv/projects/icc-eval-core
run: |
set -euo pipefail
LOCK_FILE=/tmp/icc-eval-core-api-pipeline.lock
# clear log files so we don't upload old logs from previous runs
rm -f /srv/projects/icc-eval-core/pipeline.log \
/srv/projects/icc-eval-core/import.log
(
if ! flock -n 200; then
echo "Another pipeline run is already active on this VM. Exiting without starting a new run."
exit 78
fi
echo "::group::Pipeline logs"
./run_stack.sh --profile pipeline run --rm -T pipeline 2>&1 | tee pipeline.log
echo "::endgroup::"
) 200>"$LOCK_FILE"
- name: Upload pipeline log
uses: actions/upload-artifact@v4
if: always()
with:
name: pipeline-log
path: /srv/projects/icc-eval-core/pipeline.log
- name: Import results into backend database
timeout-minutes: 15
working-directory: /srv/projects/icc-eval-core
run: |
set -euo pipefail
LOCK_FILE=/tmp/icc-eval-core-api-pipeline.lock
(
if ! flock -n 200; then
echo "Another pipeline run is already active on this VM. Exiting without starting a new run."
exit 78
fi
echo "::group::Pipeline logs"
./run_stack.sh run --rm -w '/app/icc_eval_core_api' backend 'uv run python manage.py import_dataset /data/output/' 2>&1 | tee import.log
echo "::endgroup::"
) 200>"$LOCK_FILE"
- name: Relaunch the stack for serving
timeout-minutes: 15
working-directory: /srv/projects/icc-eval-core
run: |
set -euo pipefail
LOCK_FILE=/tmp/icc-eval-core-api-pipeline.lock
(
if ! flock -n 200; then
echo "Another pipeline run is already active on this VM. Exiting without starting a new run."
exit 78
fi
echo "::group::Pipeline logs"
./run_stack.sh 2>&1 | tee launch.log
echo "::endgroup::"
) 200>"$LOCK_FILE"
- name: Upload import log
uses: actions/upload-artifact@v4
if: always()
with:
name: import-log
path: /srv/projects/icc-eval-core/import.log
- name: Write job summary
if: always()
run: |
{
echo "## Pipeline run"
echo ""
echo "- VM: $(hostname)"
echo "- Repo path: /srv/projects/icc-eval-core"
echo "- Commit: $GITHUB_SHA"
echo ""
echo "### Last 80 log lines"
echo '```'
tail -n 80 /srv/projects/icc-eval-core/pipeline.log || true
echo '```'
} >> "$GITHUB_STEP_SUMMARY"