name: Update .app-headers in /misc on: pull_request: types: - closed branches: - main # Trigger nur, wenn der PR gemerged wurde 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: update-and-create-pr: runs-on: ubuntu-latest permissions: contents: write pull-requests: write steps: # Step 1: Checkout repository - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch all branches for full context # 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 - name: Merge main into update-app-headers run: | git merge origin/main --no-edit || echo "No changes to merge from main." # Step 5: Identify changes in .sh files - name: Check for .sh files and extract app names id: detect_sh_files run: | # Get the list of changed files in the PR CHANGED_FILES=$(git diff --name-only HEAD origin/main) # Find .sh files and extract app names CHANGED_SH_FILES=$(echo "$CHANGED_FILES" | grep '\.sh$') if [ -z "$CHANGED_SH_FILES" ]; then echo "No .sh files changed." exit 0 else echo "Changed .sh files detected:" echo "$CHANGED_SH_FILES" # Extract app names from the file names or content APP_NAMES="" for FILE in $CHANGED_SH_FILES; do # Assuming the app name is part of the file name (e.g., 'appName.sh') APP_NAME=$(basename "$FILE" .sh) APP_NAMES="$APP_NAMES$APP_NAME " done echo "App names to process: $APP_NAMES" echo "::set-output name=app_names::$APP_NAMES" fi # Step 6: Process the app names and update .app-headers - name: Process app names and update .app-headers if: steps.detect_sh_files.outputs.app_names != '' run: | APP_NAMES="${{ steps.detect_sh_files.outputs.app_names }}" # 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 # For each app name, run figlet and append to .app-headers for APP_NAME in $APP_NAMES; do echo "Processing app: $APP_NAME" echo "$(figlet $APP_NAME)" >> .app-headers done # Step 7: Commit and push changes (if any) - name: Commit and push changes run: | git diff --quiet -- .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 - 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) echo "PR created: $PR_URL" else echo "PR already exists." fi # Step 9: 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." else echo "No PR found to merge." fi # Step 10: Final status output - name: Output final status run: | echo "Workflow completed successfully. Branch and PR status updated."