diff --git a/.gitea/workflows/production-tests.yml b/.gitea/workflows/production-tests.yml index 45a0b4c2..b09572fc 100644 --- a/.gitea/workflows/production-tests.yml +++ b/.gitea/workflows/production-tests.yml @@ -30,6 +30,11 @@ jobs: cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo + - name: Initialize job logging + run: | + cd /var/lib/aitbc-workspaces/production-tests/repo + bash scripts/ci/setup-job-logging.sh + - name: Setup test environment run: | cd /var/lib/aitbc-workspaces/production-tests/repo @@ -43,9 +48,6 @@ jobs: --skip-requirements \ --extra-packages "pytest pytest-asyncio pytest-timeout requests pyjwt fastapi uvicorn[standard] redis bcrypt websockets numpy psutil prometheus-client celery aiohttp pydantic" - # Install agent-coordinator package with its dependencies - venv/bin/pip install -q -e apps/agent-coordinator - # Ensure standard directories exist mkdir -p /var/lib/aitbc/data /var/lib/aitbc/keystore /etc/aitbc /var/log/aitbc diff --git a/.gitea/workflows/staking-tests.yml b/.gitea/workflows/staking-tests.yml index def4a402..c021d353 100644 --- a/.gitea/workflows/staking-tests.yml +++ b/.gitea/workflows/staking-tests.yml @@ -32,6 +32,11 @@ jobs: cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo + - name: Initialize job logging + run: | + cd /var/lib/aitbc-workspaces/staking-tests/repo + bash scripts/ci/setup-job-logging.sh + - name: Setup Python environment run: | cd /var/lib/aitbc-workspaces/staking-tests/repo @@ -81,6 +86,11 @@ jobs: cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo + - name: Initialize job logging + run: | + cd /var/lib/aitbc-workspaces/staking-integration/repo + bash scripts/ci/setup-job-logging.sh + - name: Setup Python environment run: | cd /var/lib/aitbc-workspaces/staking-integration/repo @@ -120,6 +130,11 @@ jobs: cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo + - name: Initialize job logging + run: | + cd /var/lib/aitbc-workspaces/staking-contract/repo + bash scripts/ci/setup-job-logging.sh + - name: Setup Node.js environment run: | cd /var/lib/aitbc-workspaces/staking-contract/repo/contracts @@ -154,6 +169,11 @@ jobs: cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo + - name: Initialize job logging + run: | + cd /var/lib/aitbc-workspaces/staking-runner/repo + bash scripts/ci/setup-job-logging.sh + - name: Setup Python environment run: | cd /var/lib/aitbc-workspaces/staking-runner/repo diff --git a/.gitea/workflows/systemd-sync.yml b/.gitea/workflows/systemd-sync.yml index 1c88c33f..a498eb75 100644 --- a/.gitea/workflows/systemd-sync.yml +++ b/.gitea/workflows/systemd-sync.yml @@ -28,6 +28,11 @@ jobs: cd "$WORKSPACE" git clone --depth 1 http://gitea.bubuit.net:3000/oib/aitbc.git repo + - name: Initialize job logging + run: | + cd /var/lib/aitbc-workspaces/systemd-sync/repo + bash scripts/ci/setup-job-logging.sh + - name: Validate service files run: | cd /var/lib/aitbc-workspaces/systemd-sync/repo @@ -71,14 +76,14 @@ jobs: fi echo "=== Syncing systemd files ===" - if [[ -x /opt/aitbc/scripts/utils/link-systemd.sh ]]; then + if [[ -x scripts/utils/link-systemd.sh ]]; then if [[ $EUID -eq 0 ]]; then - /opt/aitbc/scripts/utils/link-systemd.sh + ./scripts/utils/link-systemd.sh else - sudo /opt/aitbc/scripts/utils/link-systemd.sh + sudo ./scripts/utils/link-systemd.sh fi else - echo "⚠️ /opt/aitbc/scripts/utils/link-systemd.sh not found" + echo "⚠️ scripts/utils/link-systemd.sh not found" exit 1 fi diff --git a/scripts/ci/setup-job-logging.sh b/scripts/ci/setup-job-logging.sh new file mode 100644 index 00000000..94937327 --- /dev/null +++ b/scripts/ci/setup-job-logging.sh @@ -0,0 +1,76 @@ +#!/bin/bash +set -euo pipefail + +LOG_DIR="${AITBC_CI_LOG_DIR:-/opt/gitea-runner/logs}" +WORKFLOW_NAME="${GITHUB_WORKFLOW:-workflow}" +JOB_NAME="${GITHUB_JOB:-job}" +RUN_ID="${GITHUB_RUN_ID:-${GITHUB_RUN_NUMBER:-$(date +%s)}}" +RUN_NUMBER="${GITHUB_RUN_NUMBER:-}" +RUN_ATTEMPT="${GITHUB_RUN_ATTEMPT:-1}" +GITHUB_ENV_FILE="${GITHUB_ENV:-${GITEA_ENV:-}}" + +sanitize() { + printf '%s' "$1" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9._-]+/-/g; s/^-+//; s/-+$//' +} + +SAFE_WORKFLOW="$(sanitize "$WORKFLOW_NAME")" +SAFE_JOB="$(sanitize "$JOB_NAME")" +SAFE_ATTEMPT="$(sanitize "$RUN_ATTEMPT")" +SAFE_WORKFLOW="${SAFE_WORKFLOW:-workflow}" +SAFE_JOB="${SAFE_JOB:-job}" + +mkdir -p "$LOG_DIR" + +LOG_BASENAME="${SAFE_WORKFLOW}_${SAFE_JOB}_${RUN_ID}_attempt-${SAFE_ATTEMPT}" +LOG_FILE="$LOG_DIR/${LOG_BASENAME}.log" +INDEX_FILE="$LOG_DIR/index.tsv" +LATEST_FILE="$LOG_DIR/latest.log" +WORKFLOW_LATEST_FILE="$LOG_DIR/latest-${SAFE_WORKFLOW}.log" +JOB_LATEST_FILE="$LOG_DIR/latest-${SAFE_WORKFLOW}-${SAFE_JOB}.log" +ENV_FILE="/tmp/aitbc-ci-log-${RUN_ID}-${SAFE_JOB}.env" + +: > "$LOG_FILE" +touch "$INDEX_FILE" + +printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ + "$(date -Iseconds)" \ + "$RUN_ID" \ + "$RUN_NUMBER" \ + "$RUN_ATTEMPT" \ + "$WORKFLOW_NAME" \ + "$JOB_NAME" \ + "$LOG_FILE" >> "$INDEX_FILE" + +ln -sfn "$LOG_FILE" "$LATEST_FILE" +ln -sfn "$LOG_FILE" "$WORKFLOW_LATEST_FILE" +ln -sfn "$LOG_FILE" "$JOB_LATEST_FILE" + +cat > "$ENV_FILE" </dev/null || : +fi +export AITBC_CI_LOGGING_ACTIVE=1 +export AITBC_CI_LOG_FILE="$LOG_FILE" +exec > >(tee -a "$LOG_FILE") 2>&1 +echo "=== \${GITHUB_WORKFLOW:-workflow} / \${GITHUB_JOB:-job} :: \$(date -Iseconds) ===" +EOF + +if [[ -n "$GITHUB_ENV_FILE" ]]; then + { + printf 'AITBC_CI_LOG_DIR=%s\n' "$LOG_DIR" + printf 'AITBC_CI_LOG_FILE=%s\n' "$LOG_FILE" + printf 'AITBC_CI_LOG_INDEX=%s\n' "$INDEX_FILE" + printf 'AITBC_CI_LOG_LATEST=%s\n' "$LATEST_FILE" + printf 'AITBC_CI_LOG_WORKFLOW_LATEST=%s\n' "$WORKFLOW_LATEST_FILE" + printf 'AITBC_CI_LOG_JOB_LATEST=%s\n' "$JOB_LATEST_FILE" + printf 'BASH_ENV=%s\n' "$ENV_FILE" + } >> "$GITHUB_ENV_FILE" +else + echo "CI logging warning: GITHUB_ENV/GITEA_ENV not set; automatic logging for later steps is unavailable" +fi + +echo "CI log file: $LOG_FILE" +echo "CI latest log: $LATEST_FILE" +echo "CI workflow latest: $WORKFLOW_LATEST_FILE" +echo "CI job latest: $JOB_LATEST_FILE" +echo "CI log index: $INDEX_FILE"