name: Scheduled Fake Commits on: # Trigger the workflow on a schedule. schedule: # This expression means "run every 3 minutes". Useful for testing. # To revert to the original 8-hour schedule, change this to '0 */8 * * *'. - cron: "0 */3 * * *" # Original schedule: every 8 hours # To trigger manually for testing, you can add workflow_dispatch: # workflow_dispatch: jobs: create_scheduled_commits: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: # Fetch the full history to ensure pushes work correctly fetch-depth: 0 # Use a token with write access. This should be stored as a secret in your Gitea repo settings. # The default GITEA_TOKEN might not have push permissions, so a Personal Access Token is recommended. # Ensure you have a secret named GITEA_TOKEN with appropriate permissions (including write:actions or api) token: ${{ secrets.GLOBAL_KEY }} # Replace GITEA_TOKEN with the name of your secret - name: Set up Git config # Configure Git user details globally for the runner run: | echo "setting up git config" git config --global user.name "Gitea Actions Bot" git config --global user.email "actions-bot@your-gitea-instance.com" # Replace with a suitable email echo "git config setup complete" - name: Create and Push Commits and Trigger Workflows id: push_commits_and_trigger # Updated ID env: # Define your list of authors here. Each author should be on a new line, # formatted as "Author Name ". # For production, this should ideally be stored as a secret named FAKE_COMMIT_AUTHORS. # For debugging, you can define it directly here as you have done. AUTHOR_LIST: | Author One Author Two Author Three Author Four Author Five Author Six Author Seven Author Eight Author Nine Author Ten DWSAuthor One DWSAuthor Two DWSAuthor Three DWSAuthor Four DWSAuthor Five DWSAuthor Six DWSAuthor Seven DWSAuthor Eight DWSAuthor Nine DWSAuthor Ten COMMIT_COUNT: 12 # Number of commits to create SLEEP_SECONDS: 150 # Delay between commits in seconds TARGET_BRANCH: main # The branch to commit to and trigger workflows on GITEA_BASE_URL: https://git.dws.rip # Replace with your Gitea instance URL REPO_OWNER: dubey # Replace with your repository owner/organization REPO_NAME: WebGoat # Replace with your repository name # Define a space-separated list of workflow names to trigger WORKFLOW_NAMES: "DDSAST DDSDS DDSCA" # Replace with the actual names of your workflows run: | echo "starting Create and Push Commits and Trigger Workflows step" echo "AUTHOR_LIST content:" # Mask sensitive content if AUTHOR_LIST were a secret, but here it's in the workflow file for debugging # echo "$AUTHOR_LIST" | sed 's/@[^>]*>/@***/g' # Example masking echo "reading author's list into array" # Read authors into a Bash array using readarray readarray -t authors <<< "$AUTHOR_LIST" echo "finished reading author's list into array" # Check if authors list is empty if [ ${#authors[@]} -eq 0 ]; then echo "Error: AUTHOR_LIST is empty or could not be parsed into an array." exit 1 fi # Shuffle the authors array to randomize the order authors=($(printf "%s\n" "${authors[@]}" | shuf)) # Read workflow names into a Bash array IFS=' ' read -r -a workflow_array <<< "$WORKFLOW_NAMES" echo "Workflows to trigger: ${workflow_array[@]}" echo "Starting commit creation process..." echo "Authors available: ${#authors[@]}" echo "Commits to create: $COMMIT_COUNT" echo "Delay between commits: $SLEEP_SECONDS seconds" echo "Target branch: $TARGET_BRANCH" # Loop to create the specified number of commits for i in $(seq 1 $COMMIT_COUNT); do # Calculate the index for the current author, cycling through the list author_index=$(( (i - 1) % ${#authors[@]} )) current_author="${authors[$author_index]}" echo "Processing author: $current_author" # Debug echo # Extract name and email from the author string # Assumes format "Name " author_name=$(echo "$current_author" | sed -E 's/^(.*) <.*>$/\1/') author_email=$(echo "$current_author" | sed -E 's/^.* <(.*)>$/\1/') echo "Extracted name: $author_name, email: $author_email" # Debug echo echo "--- Creating commit $i of $COMMIT_COUNT by $author_name ---" # Configure git user for this specific commit git config user.name "$author_name" git config user.email "$author_email" # Create a dummy change: append current timestamp and author to a file # This ensures there's always something to commit echo "$(date): Commit $i by $author_name" >> fake_commit_log.txt # Stage the changes git add fake_commit_log.txt # Commit the changes git commit -m "Automated commit $i by $author_name" # Push the commit to the target branch # Use --set-upstream origin $TARGET_BRANCH on the first push if needed echo "Pushing commit..." git push origin HEAD:$TARGET_BRANCH echo "Commit $i pushed successfully." # --- Trigger the other workflows after each successful push --- echo "Triggering specified workflows on branch '$TARGET_BRANCH' for commit $i..." # Loop through the list of workflow names and trigger each one for workflow_name in "${workflow_array[@]}"; do echo "Attempting to trigger workflow: $workflow_name" # Construct the API URL API_URL="${GITEA_BASE_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/actions/workflows/${workflow_name}/dispatches" # Use curl to send the API request # Requires a GITEA_TOKEN with write:actions or api scope curl -X POST \ -H "Authorization: Bearer ${{ secrets.GLOBAL_KEY }}" \ -H "Content-Type: application/json" \ -d '{"ref": "'"$TARGET_BRANCH"'"}' \ "$API_URL" echo "Workflow trigger request sent for workflow '$workflow_name' for commit $i." done echo "Finished triggering workflows for commit $i." # --- End Trigger --- # Wait for the specified delay before the next commit, unless it's the last one if [ $i -lt $COMMIT_COUNT ]; then echo "Waiting for $SLEEP_SECONDS seconds before the next commit..." sleep $SLEEP_SECONDS fi done echo "Finished creating $COMMIT_COUNT commits and triggering workflows."