- Merge defer-discord-thread.yml and delete-discord-thread.yml into create-ready-for-testing-message.yml (ready/lock/close jobs) - Derive script slug from the "Name of the Script" issue field (lowercase + spaces->dashes), use issue-title case for display - Fix slug mismatch (tr -d ' ' vs dashes) that broke delete_new_script - move-to-main: PR title/body taken from the issue Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
207 lines
7.0 KiB
YAML
Generated
207 lines
7.0 KiB
YAML
Generated
name: Delete Files on Issue Close
|
|
|
|
on:
|
|
issues:
|
|
types: [closed]
|
|
|
|
jobs:
|
|
delete-files:
|
|
runs-on: ubuntu-latest
|
|
if: contains(github.event.issue.labels.*.name, 'Started Migration To ProxmoxVE') && github.repository == 'community-scripts/ProxmoxVED'
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Generate a token for PR approval and merge
|
|
id: generate-token-merge
|
|
uses: actions/create-github-app-token@v2
|
|
with:
|
|
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
|
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
|
owner: community-scripts
|
|
repositories: ProxmoxVED
|
|
|
|
- name: Extract Issue Info and Script Type
|
|
id: extract_info
|
|
env:
|
|
ISSUE_BODY: ${{ github.event.issue.body }}
|
|
ISSUE_TITLE: ${{ github.event.issue.title }}
|
|
run: |
|
|
BODY="$ISSUE_BODY"
|
|
|
|
# TITLE (slug): from the "Name of the Script" field in the issue body, normalized to
|
|
# the repo's lowercase + spaces->dashes convention (e.g. "Alpine Cinny" -> "alpine-cinny").
|
|
# This must match the slug move-to-main-repo.yaml used to create the files, otherwise the
|
|
# delete branch would not find them. Falls back to the title if the field is absent.
|
|
NAME_RAW=$(printf '%s\n' "$BODY" \
|
|
| sed -n '/^###[[:space:]]*Name of the Script/,/^###/p' \
|
|
| sed '1d;/^###/d;/^[[:space:]]*$/d' | head -n1)
|
|
if [ -z "$NAME_RAW" ]; then
|
|
NAME_RAW="$ISSUE_TITLE"
|
|
fi
|
|
TITLE=$(echo "$NAME_RAW" | tr -d '\r' | tr '[:upper:]' '[:lower:]' | sed 's/[[:space:]]\+/-/g')
|
|
|
|
echo "TITLE=$TITLE" >> $GITHUB_ENV
|
|
|
|
# Detect script type from issue body
|
|
if echo "$BODY" | grep -qi "CT (LXC Container)"; then
|
|
SCRIPT_TYPE="ct"
|
|
elif echo "$BODY" | grep -qi "VM (Virtual Machine)"; then
|
|
SCRIPT_TYPE="vm"
|
|
elif echo "$BODY" | grep -qi "Addon (tools/addon)"; then
|
|
SCRIPT_TYPE="addon"
|
|
elif echo "$BODY" | grep -qi "PVE Tool (tools/pve)"; then
|
|
SCRIPT_TYPE="pve"
|
|
else
|
|
# Fallback detection
|
|
if [[ "$TITLE" == *"-vm"* ]]; then
|
|
SCRIPT_TYPE="vm"
|
|
else
|
|
SCRIPT_TYPE="ct"
|
|
fi
|
|
fi
|
|
|
|
echo "SCRIPT_TYPE=$SCRIPT_TYPE" >> $GITHUB_ENV
|
|
echo "Detected: $TITLE (type: $SCRIPT_TYPE)"
|
|
|
|
- name: Check if Files Exist in community-scripts/ProxmoxVE
|
|
id: check_files
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
REPO="community-scripts/ProxmoxVE"
|
|
API_URL="https://api.github.com/repos/$REPO/contents"
|
|
TITLE="${{ env.TITLE }}"
|
|
SCRIPT_TYPE="${{ env.SCRIPT_TYPE }}"
|
|
|
|
# Define files based on script type
|
|
case "$SCRIPT_TYPE" in
|
|
ct)
|
|
FILES=(
|
|
"ct/${TITLE}.sh"
|
|
"install/${TITLE}-install.sh"
|
|
"frontend/public/json/${TITLE}.json"
|
|
)
|
|
;;
|
|
vm)
|
|
FILES=(
|
|
"vm/${TITLE}.sh"
|
|
"frontend/public/json/${TITLE}.json"
|
|
)
|
|
;;
|
|
addon)
|
|
FILES=(
|
|
"tools/addon/${TITLE}.sh"
|
|
"frontend/public/json/${TITLE}.json"
|
|
)
|
|
;;
|
|
pve)
|
|
FILES=(
|
|
"tools/pve/${TITLE}.sh"
|
|
)
|
|
;;
|
|
esac
|
|
|
|
EXISTS=false
|
|
for FILE in "${FILES[@]}"; do
|
|
STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $GH_TOKEN" "$API_URL/$FILE")
|
|
if [ "$STATUS" -eq 200 ]; then
|
|
EXISTS=true
|
|
echo "$FILE exists in $REPO"
|
|
else
|
|
echo "$FILE does NOT exist in $REPO"
|
|
fi
|
|
done
|
|
|
|
if [ "$EXISTS" = false ]; then
|
|
echo "No matching files found in $REPO. Exiting..."
|
|
exit 0
|
|
fi
|
|
|
|
- name: Commit and Push Changes
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
TITLE="${{ env.TITLE }}"
|
|
SCRIPT_TYPE="${{ env.SCRIPT_TYPE }}"
|
|
branch="delete_files_${TITLE}"
|
|
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
git checkout -b $branch
|
|
|
|
# Delete files based on script type
|
|
case "$SCRIPT_TYPE" in
|
|
ct)
|
|
rm -f "ct/${TITLE}.sh"
|
|
rm -f "ct/headers/${TITLE}"
|
|
rm -f "install/${TITLE}-install.sh"
|
|
rm -f "json/${TITLE}.json"
|
|
# Also try alpine variant
|
|
if [[ "$TITLE" == alpine-* ]]; then
|
|
stripped="${TITLE#alpine-}"
|
|
rm -f "json/${stripped}.json"
|
|
fi
|
|
;;
|
|
vm)
|
|
rm -f "vm/${TITLE}.sh"
|
|
rm -f "json/${TITLE}.json"
|
|
;;
|
|
addon)
|
|
rm -f "tools/addon/${TITLE}.sh"
|
|
rm -f "json/${TITLE}.json"
|
|
;;
|
|
pve)
|
|
rm -f "tools/pve/${TITLE}.sh"
|
|
;;
|
|
esac
|
|
|
|
git add .
|
|
if git diff --staged --quiet; then
|
|
echo "No files to delete. Exiting..."
|
|
exit 0
|
|
fi
|
|
|
|
git commit -m "Delete ${TITLE} (${SCRIPT_TYPE}) after migration to ProxmoxVE"
|
|
git push origin $branch --force
|
|
|
|
gh pr create \
|
|
--title "Delete ${TITLE} after Merge to Main" \
|
|
--body "Automated cleanup: Delete ${TITLE} (${SCRIPT_TYPE}) files after successful migration to ProxmoxVE main repo." \
|
|
--base main \
|
|
--head $branch
|
|
|
|
pr_number=$(gh pr list --head $branch --json number --jq '.[].number')
|
|
echo "pr_number=$pr_number" >> $GITHUB_ENV
|
|
echo "branch=$branch" >> $GITHUB_ENV
|
|
|
|
- name: Approve pull request and merge
|
|
if: env.pr_number != ''
|
|
env:
|
|
GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
|
|
run: |
|
|
git config --global user.name "github-actions-automerge[bot]"
|
|
git config --global user.email "github-actions-automerge[bot]@users.noreply.github.com"
|
|
PR_NUMBER="${{ env.pr_number }}"
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
gh pr review $PR_NUMBER --approve
|
|
gh pr merge $PR_NUMBER --squash --admin
|
|
fi
|
|
|
|
- name: Comment on Issue
|
|
if: env.pr_number != ''
|
|
uses: actions/github-script@v7
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
script: |
|
|
const issue_number = context.payload.issue.number;
|
|
const message = `Files deleted with PR #${process.env.pr_number}`;
|
|
github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: issue_number,
|
|
body: message
|
|
});
|