From 665361a4e38d2bb6f6e84384878a94fed0c10ccb Mon Sep 17 00:00:00 2001 From: Shikhar Pandya Date: Tue, 28 Oct 2025 00:05:47 +0530 Subject: [PATCH] [Added a script for auto syncing forks of parent repository] Beta #1 --- .gitea/workflows/test_image_build_push.yml | 71 +++++++++++++++++++--- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/test_image_build_push.yml b/.gitea/workflows/test_image_build_push.yml index f53e140..edda211 100644 --- a/.gitea/workflows/test_image_build_push.yml +++ b/.gitea/workflows/test_image_build_push.yml @@ -1,8 +1,10 @@ name: sample gradle build and test -run-name: Build started by $ {{gitea.actor}} +run-name: Build started by ${{ gitea.actor }} + on: push: branches: [test] + jobs: tag: runs-on: ubuntu-latest @@ -13,17 +15,20 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Get new version id: new_version run: | VERSION=$(git describe --tags --abbrev=0) - echo ${VERSION} + echo "Current version: ${VERSION}" MAJOR=$(echo ${VERSION} | cut -d "." -f 1) MINOR=$(echo ${VERSION} | cut -d "." -f 2) PATCH=$(echo ${VERSION} | cut -d "." -f 3) - NEW_PATCH=$(( ${PATCH} + 1)) - echo ${NEW_PATCH} - echo "new_version=$(echo "${MAJOR}.${MINOR}.${NEW_PATCH}")" >> $GITHUB_OUTPUT + NEW_PATCH=$((PATCH + 1)) + NEW_VERSION="${MAJOR}.${MINOR}.${NEW_PATCH}" + echo "New version: ${NEW_VERSION}" + echo "new_version=${NEW_VERSION}" >> $GITHUB_OUTPUT + build_tag_push: runs-on: ubuntu-latest needs: tag @@ -34,31 +39,79 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + - name: JDK setup uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: '17' + - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v3 + - name: Create and push tag run: | - echo "NEW_VERSION=${{ needs.tag.outputs.new_version }}" - git config --global user.name "${{gitea.actor}}" + echo "New version: ${{ needs.tag.outputs.new_version }}" + git config --global user.name "${{ gitea.actor }}" git config --global user.email "${{ gitea.actor }}@users.noreply.github.com" - git tag -a ${{ needs.tag.outputs.new_version }} -m "Pushing new version ${{ needs.tag.outputs.new_version }}" - git push origin ${{ needs.tag.outputs.new_version }} + git tag -a "${{ needs.tag.outputs.new_version }}" -m "Pushing new version ${{ needs.tag.outputs.new_version }}" + git push origin "${{ needs.tag.outputs.new_version }}" + - name: Log in to Gitea Docker Registry uses: docker/login-action@v3 with: registry: 'http://192.168.0.100:8928' username: hitanshu password: ${{ secrets.TOKEN }} + - name: Gradle build run: ./gradlew bootBuildImage --imageName=192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} + - name: Tag image as test run: docker tag 192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} 192.168.0.100:8928/hithomelabs/cftunnels:test + - name: Push to Gitea Registry run: | docker push 192.168.0.100:8928/hithomelabs/cftunnels:test docker push 192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }} + + sync_forks: + name: Sync All Forks + runs-on: ubuntu-latest + needs: build_tag_push + steps: + - name: Check out repository code + uses: actions/checkout@v4 + + - name: Sync all forks via Gitea API + env: + TOKEN: ${{ secrets.TOKEN }} + BASE_URL: "https://gitea.hithomelabs.com/api/v1" + OWNER: "Hithomelabs" + REPO: "CFTunnels" + run: | + set -e + set -o pipefail + + echo "Fetching forks for $OWNER/$REPO..." + response=$(curl -s -X GET "$BASE_URL/repos/$OWNER/$REPO/forks" -H "Authorization: token $TOKEN") + + # Extract clone URLs of forked repos (excluding the parent repo) + filtered=$(echo "$response" | grep -o '"clone_url":"[^"]*"' | sed 's/"clone_url":"\([^"]*\)"/\1/' | grep -v "/$OWNER") + + echo "Detected forks:" + echo "$filtered" + + readarray -t forks <<< "$filtered" + + for fork_url in "${forks[@]}"; do + echo "🔄 Syncing fork: $fork_url" + git remote add fork "$fork_url" 2>/dev/null || git remote set-url fork "$fork_url" + if git push fork main --force >/dev/null 2>&1; then + echo "✅ Synced $fork_url successfully" + else + echo "❌ Failed to sync $fork_url" + fi + echo + done +