From da90f4f9a5e36622433889641c27e3d23a314b2c Mon Sep 17 00:00:00 2001 From: mathias Date: Tue, 12 May 2026 19:46:54 +0000 Subject: [PATCH] fix: grep regex, token-authenticated push, safer owner extraction --- .gitea/workflows/init.yml | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/.gitea/workflows/init.yml b/.gitea/workflows/init.yml index c328c4a..041355d 100644 --- a/.gitea/workflows/init.yml +++ b/.gitea/workflows/init.yml @@ -14,11 +14,9 @@ jobs: name: Bootstrap project from template runs-on: self-hosted - # One-shot guard: skip entirely if CLAUDE.md already exists steps: - uses: actions/checkout@v4 with: - token: ${{ secrets.GITEA_TOKEN }} fetch-depth: 0 - name: Check if already initialised @@ -34,18 +32,27 @@ jobs: if: steps.guard.outputs.skip == 'false' id: vars run: | - # Repo name from git remote (e.g. macro-research) PROJECT_NAME=$(basename "$(git rev-parse --show-toplevel)") - # Module path: gitea hostname + owner + project name GITEA_HOST=$(git remote get-url origin | sed 's|http://||;s|https://||;s|/.*||') - OWNER=$(git remote get-url origin | sed 's|.*/\([^/]*\)/[^/]*\.git|\1|') + OWNER=$(git remote get-url origin | sed 's|.*://[^/]*/\([^/]*\)/.*|\1|') MODULE_PATH="${GITEA_HOST}/${OWNER}/${PROJECT_NAME}" echo "project_name=${PROJECT_NAME}" >> "$GITHUB_OUTPUT" echo "module_path=${MODULE_PATH}" >> "$GITHUB_OUTPUT" - echo "owner=${OWNER}" >> "$GITHUB_OUTPUT" echo "→ PROJECT_NAME=${PROJECT_NAME}" echo "→ MODULE_PATH=${MODULE_PATH}" + - name: Configure git with token + if: steps.guard.outputs.skip == 'false' + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + run: | + REMOTE=$(git remote get-url origin) + # Inject token into remote URL for push-back + AUTH_REMOTE=$(echo "$REMOTE" | sed "s|http://|http://gitea-actions:${GITEA_TOKEN}@|") + git remote set-url origin "$AUTH_REMOTE" + git config user.name "gitea-actions[bot]" + git config user.email "gitea-actions[bot]@noreply.local" + - name: Substitute placeholders in file contents if: steps.guard.outputs.skip == 'false' env: @@ -53,17 +60,15 @@ jobs: MODULE_PATH: ${{ steps.vars.outputs.module_path }} run: | set -euo pipefail - # Files to substitute (relative paths, including templated dir names) - FILES=$(git ls-files | grep -v '^\.gitea/workflows/init\.yml$') - for f in $FILES; do - if grep -qF '__PROJECT_NAME__\|__MODULE_PATH__' "$f" 2>/dev/null; then + while IFS= read -r f; do + if grep -qE '__PROJECT_NAME__|__MODULE_PATH__' "$f" 2>/dev/null; then sed -i \ -e "s|__PROJECT_NAME__|${PROJECT_NAME}|g" \ -e "s|__MODULE_PATH__|${MODULE_PATH}|g" \ "$f" echo " substituted: $f" fi - done + done < <(git ls-files | grep -v '^\.gitea/workflows/init\.yml$') - name: Rename templated directories if: steps.guard.outputs.skip == 'false' @@ -71,16 +76,15 @@ jobs: PROJECT_NAME: ${{ steps.vars.outputs.project_name }} run: | set -euo pipefail - # Rename cmd/__PROJECT_NAME__ → cmd/$PROJECT_NAME if [ -d "cmd/__PROJECT_NAME__" ]; then git mv "cmd/__PROJECT_NAME__" "cmd/${PROJECT_NAME}" echo " renamed: cmd/__PROJECT_NAME__ → cmd/${PROJECT_NAME}" fi - - name: Install toolchain for context:sync + - name: Install task if missing if: steps.guard.outputs.skip == 'false' run: | - which task || go install github.com/go-task/task/v3/cmd/task@latest + which task 2>/dev/null || go install github.com/go-task/task/v3/cmd/task@latest - name: Run context:sync if: steps.guard.outputs.skip == 'false' @@ -97,8 +101,6 @@ jobs: env: PROJECT_NAME: ${{ steps.vars.outputs.project_name }} run: | - git config user.name "gitea-actions[bot]" - git config user.email "gitea-actions[bot]@noreply.local" git add -A git commit -m "chore: bootstrap ${PROJECT_NAME} from template" git push origin main