Skip to content

Transfer issues

Transfer issues #31

Workflow file for this run

name: Transfer issues
on:
workflow_dispatch:
inputs:
count:
description: How many issues to transfer
default: "1"
required: true
from_name:
description: "the name of the mozilla/<from_name repository to transfer issues from"
required: true
secret_name:
description: "the name of the secret containing the PAT for the repository to transfer issues to"
required: true
permissions: write-all
env:
ALLOWED_REPOS: "addons-server,addons-frontend"
concurrency:
group: transfer
cancel-in-progress: true
jobs:
fetch_issues:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Transfer issues
env:
GH_TOKEN: ${{ secrets[format('{0}', inputs.secret_name)] }}
shell: bash
run: |
set -x
echo "token: $GH_TOKEN"
gh auth status
exit 0
if [[ ! "${{ env.ALLOWED_REPOS }}" =~ (^|,)"${{ inputs.from_name }}"(,|$) ]]; then
echo "Invalid from_name "${{ inputs.from_name }}". Exiting..."
exit 1
fi
from_repo="${{ github.server_url }}/${{ github.repository_owner }}/${{ inputs.from_name }}"
to_repo="${{ github.server_url }}/${{ github.repository }}"
repo_label="repository:${{ inputs.from_name }}"
gh label clone ${{ steps.meta.outputs.from_repo }} -R ${{ steps.meta.outputs.to_repo }} --force
gh label create ${{ steps.meta.outputs.repo_label }} -R ${{ steps.meta.outputs.to_repo }} --force
transfer_issue() {
original_issue_url=$1
from_repo=$2
to_repo=$3
repo_label=$4
echo "$original_issue_url" >> old-issues.txt
new_issue_url=$(gh issue transfer -R $from_repo "$original_issue_url" "$to_repo")
echo "$new_issue_url" >> new-issues.txt
echo "Transferred issue $original_issue_url to $new_issue_url"
gh issue -R $to_repo edit $new_issue_url --add-label $repo_label
}
export -f transfer_issue
echo "Transferring issues from \"${{ steps.meta.outputs.from_repo }}\" to \"${{ steps.meta.outputs.to_repo }}\""
gh issue list -R "${{ steps.meta.outputs.from_repo }}" -s all -L ${{ inputs.count}} --json url --search "sort:created-asc" --jq '.[] | .url'| xargs -P 4 -I % bash -c -e 'transfer_issue % '"${{ steps.meta.outputs.from_repo }}"' '"${{ steps.meta.outputs.to_repo }}"' '"${{ steps.meta.outputs.repo_label }}"''
cat old-issues.txt
cat new-issues.txt
- name: Delete secret
if: always()
shell: bash
run: |
if gh secret list --json name --jq '.[] | .name' | grep -q "$SECRET_NAME"; then
gh secret delete ${{ inputs.secret_name }}
fi