diff --git a/.github/workflows/generate-app-headers.yaml b/.github/workflows/generate-app-headers.yaml index 89461e43..146c7e0a 100644 --- a/.github/workflows/generate-app-headers.yaml +++ b/.github/workflows/generate-app-headers.yaml @@ -1,14 +1,11 @@ name: Update .app-headers in /misc on: - pull_request: - types: - - closed + push: + paths: + - 'ct/*' # Action wird ausgelöst, wenn sich etwas in ct/ ändert branches: - main - if: github.event.pull_request.merged == true - schedule: - - cron: "59 23 * * *" # Führen den Workflow täglich um 23:59 UTC aus workflow_dispatch: jobs: @@ -23,103 +20,66 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: - fetch-depth: 0 # Fetch all branches for full context + fetch-depth: 0 # Ensure we have full access to all branches - # Step 2: Set up Git user - - name: Configure Git user - run: | - git config --global user.name "GitHub Actions" - git config --global user.email "actions@github.com" - - # Step 3: Check or create update-app-headers branch - - name: Check or create update-app-headers branch - run: | - git fetch origin - if git show-ref --quiet refs/heads/update-app-headers; then - echo "Switching to 'update-app-headers' branch." - git checkout update-app-headers - else - echo "Creating 'update-app-headers' branch." - git checkout -b update-app-headers origin/main - fi - - # Step 4: Merge main into update-app-headers + # Step 2: Merge main into update-app-headers branch - name: Merge main into update-app-headers run: | - git merge origin/main --no-edit || echo "No changes to merge from main." + git fetch origin + git checkout update-app-headers || git checkout -b update-app-headers + git merge origin/main --no-ff --no-edit + git push origin update-app-headers --force - # Step 5: Check all .sh files in ct/ directory that contain APP= - - name: Check .sh files in ct/ that contain APP= + # Step 3: Ensure .app-headers file exists and initialize it + - name: Initialize .app-headers file run: | - echo "Checking .sh files in ct/ directory that contain APP=." - SH_FILES=$(find ct/ -type f -name "*.sh" -exec grep -l "APP=" {} \;) - - if [ -z "$SH_FILES" ]; then - echo "No .sh files with APP= found in ct/ directory." - exit 0 - else - echo "Found .sh files with APP= in ct/ directory:" - echo "$SH_FILES" + if [ ! -f "ct/.app-headers" ]; then + echo "Creating .app-headers file" + touch ct/.app-headers fi - # Step 6: Overwrite .app-headers - - name: Overwrite .app-headers file + # Step 4: Loop through ct/ scripts and execute figlet if APP= is found + - name: Update .app-headers with figlet output run: | - # Ensure .app-headers file exists - if [ ! -f ".app-headers" ]; then - echo "Creating .app-headers file." - echo "Generated by CI on $(date)" > .app-headers - else - echo ".app-headers file already exists." - fi - - # Overwrite .app-headers with figlet output of each .sh file name containing APP= - echo "Overwriting .app-headers with new entries." - > .app-headers # Clear the existing file - for FILE in $SH_FILES; do - APP_NAME=$(basename "$FILE" .sh) - echo "$(figlet $APP_NAME)" >> .app-headers + echo "Updating .app-headers with figlet output." + for file in ct/*.sh; do + if grep -q "APP=" "$file"; then + APP_NAME=$(grep -oP 'APP=\K.*' "$file") + echo "Processing $file for APP: $APP_NAME" + figlet "$APP_NAME" >> ct/.app-headers + fi done - - # Step 7: Check for changes and commit - - name: Check for changes and commit + + # Step 5: Commit the changes to .app-headers + - name: Commit updated .app-headers run: | - git diff --exit-code --quiet .app-headers - if [ $? -eq 1 ]; then - echo ".app-headers has been updated, committing changes." - git commit -am "[core]: update .app-headers to latest version" - git push origin update-app-headers - else - echo "No changes to .app-headers detected, skipping commit." - fi + git diff --quiet -- ct/.app-headers || git commit -am "[core]: update .app-headers to latest version" + git push origin update-app-headers --force - # Step 8: Create Pull Request if changes detected + # Step 6: Create Pull Request to merge changes into main - name: Create Pull Request if changes detected env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - echo "Checking if PR exists." PR_EXISTS=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - echo "PR_EXISTS: $PR_EXISTS" if [ -z "$PR_EXISTS" ]; then echo "Creating a new PR." PR_URL=$(gh pr create --title "[core]: update .app-headers to latest version" \ --body "This PR automatically updates the .app-headers file." \ --head update-app-headers \ - --base main) + --base main --no-edit -q .url) echo "PR created: $PR_URL" else echo "PR already exists." fi - # Step 9: Automatically merge PR + # Step 7: Automatically merge PR - name: Automatically merge PR env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Attempting to merge PR." PR_NUMBER=$(gh pr list --head "update-app-headers" --json number --jq '.[].number') - echo "Found PR number: $PR_NUMBER" if [ -n "$PR_NUMBER" ]; then gh pr merge "$PR_NUMBER" --merge --admin --delete-branch echo "PR merged successfully." @@ -127,7 +87,7 @@ jobs: echo "No PR found to merge." fi - # Step 10: Final status output + # Step 8: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated."