[EDIT] Cmder wrong URL #25
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Convert Issue to Pull Request | |
on: | |
issues: | |
types: [opened, labeled] | |
workflow_dispatch: | |
inputs: | |
issue_number: | |
description: 'Issue number to convert to PR' | |
required: true | |
type: number | |
jobs: | |
convert_issue_to_pr: | |
if: (github.event_name == 'issues' && github.event.label.name == 'Add') || github.event_name == 'workflow_dispatch' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.PAT }} | |
- name: Get issue details | |
id: issue | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.PAT }} | |
script: | | |
const issueNumber = context.payload.inputs ? context.payload.inputs.issue_number : context.issue.number; | |
const issue = await github.rest.issues.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issueNumber | |
}); | |
return issue.data; | |
- name: Update README.md | |
run: | | |
ISSUE_BODY="${{ fromJson(steps.issue.outputs.result).body }}" | |
# Extract relevant information from issue body | |
APP_NAME=$(echo "$ISSUE_BODY" | awk '/### Application Name/{flag=1; next} /###/{flag=0} flag' | xargs) | |
APP_URL=$(echo "$ISSUE_BODY" | awk '/### Application URL/{flag=1; next} /###/{flag=0} flag' | xargs) | |
CATEGORY=$(echo "$ISSUE_BODY" | awk '/### Category/{flag=1; next} /###/{flag=0} flag' | xargs) | |
APP_DESCRIPTION=$(echo "$ISSUE_BODY" | awk '/### Description/{flag=1; next} /###/{flag=0} flag' | xargs) | |
REPO_URL=$(echo "$ISSUE_BODY" | awk '/### Repository URL/{flag=1; next} /###/{flag=0} flag' | xargs) | |
# Check if the application is open source | |
if echo "$ISSUE_BODY" | grep -q "\[X\] Open Source"; then | |
if [ -n "$REPO_URL" ]; then | |
OPEN_SOURCE_ICON="[![Open-Source Software][oss icon]]($REPO_URL)" | |
else | |
OPEN_SOURCE_ICON="[![Open-Source Software][oss icon]]($APP_URL)" | |
fi | |
else | |
OPEN_SOURCE_ICON="" | |
fi | |
FREE_ICON="" | |
# Create the new entry | |
NEW_ENTRY="* [$APP_NAME]($APP_URL) - $APP_DESCRIPTION $OPEN_SOURCE_ICON $FREE_ICON" | |
# Find the category section and insert the new entry | |
awk -v new_entry="$NEW_ENTRY" -v category="$CATEGORY" ' | |
BEGIN {in_category=0; added=0} | |
/^## / { | |
if (in_category && !added) { | |
print new_entry | |
added=1 | |
} | |
in_category = ($0 ~ "^## " category) | |
if (in_category) print "" | |
next | |
} | |
in_category && /^\* / { | |
if (!added && tolower(substr(new_entry, 3)) < tolower(substr($0, 3))) { | |
print new_entry | |
added=1 | |
} | |
next | |
} | |
{print} | |
END { | |
if (in_category && !added) print new_entry | |
} | |
' README.md > README.md.tmp && mv README.md.tmp README.md | |
# Set environment variables for later steps | |
echo "APP_NAME=$APP_NAME" >> $GITHUB_ENV | |
echo "CATEGORY=$CATEGORY" >> $GITHUB_ENV | |
echo "APP_URL=$APP_URL" >> $GITHUB_ENV | |
echo "APP_DESCRIPTION=$APP_DESCRIPTION" >> $GITHUB_ENV | |
echo "OPEN_SOURCE_ICON=$OPEN_SOURCE_ICON" >> $GITHUB_ENV | |
echo "FREE_ICON=$FREE_ICON" >> $GITHUB_ENV | |
echo "REPO_URL=$REPO_URL" >> $GITHUB_ENV | |
- name: Debug Output | |
run: | | |
echo "APP_NAME: $APP_NAME" | |
echo "APP_URL: $APP_URL" | |
echo "CATEGORY: $CATEGORY" | |
echo "APP_DESCRIPTION: $APP_DESCRIPTION" | |
echo "OPEN_SOURCE_ICON: $OPEN_SOURCE_ICON" | |
echo "FREE_ICON: $FREE_ICON" | |
echo "REPO_URL: $REPO_URL" | |
- name: Create Pull Request | |
uses: peter-evans/create-pull-request@v6 | |
with: | |
token: ${{ secrets.PAT }} | |
commit-message: "Add ${{ env.APP_NAME }} to ${{ env.CATEGORY }} category" | |
title: "Add ${{ env.APP_NAME }} to ${{ env.CATEGORY }} category" | |
body: | | |
This PR adds ${{ env.APP_NAME }} to the ${{ env.CATEGORY }} category in the README.md file. | |
Application URL: ${{ env.APP_URL }} | |
Repository URL: ${{ env.REPO_URL }} | |
Closes #${{ github.event.issue.number || github.event.inputs.issue_number }} | |
branch: add-${{ github.event.issue.number || github.event.inputs.issue_number }} | |
base: main | |
- name: Close Issue | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.PAT }} | |
script: | | |
const issueNumber = context.payload.inputs ? context.payload.inputs.issue_number : context.issue.number; | |
await github.rest.issues.update({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issueNumber, | |
state: 'closed' | |
}); |