chore/test bugbot #146
This file contains hidden or 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: PR Package Labels | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| permissions: | |
| pull-requests: write | |
| issues: write | |
| jobs: | |
| add-labels: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
| id: changes | |
| with: | |
| token: ${{ github.token }} | |
| filters: | | |
| package_react: | |
| - 'packages/react/**' | |
| package_react_native: | |
| - 'packages/react-native/**' | |
| package_core: | |
| - 'packages/core/**' | |
| - name: Ensure labels exist with correct colors | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| // Define labels with their colors | |
| const labelConfigs = [ | |
| { name: 'react', color: '61DBFB', description: 'Changes affect packages/react' }, | |
| { name: 'react-native', color: '1C79C0', description: 'Changes affect packages/react-native' }, | |
| { name: 'core', color: 'FF0000', description: 'Changes affect packages/core' }, | |
| ]; | |
| // Get all existing labels | |
| const { data: existingLabels } = await github.rest.issues.listLabelsForRepo({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| }); | |
| const existingLabelNames = existingLabels.map(label => label.name); | |
| // Create or update labels | |
| for (const labelConfig of labelConfigs) { | |
| try { | |
| if (existingLabelNames.includes(labelConfig.name)) { | |
| // Update existing label | |
| await github.rest.issues.updateLabel({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| name: labelConfig.name, | |
| color: labelConfig.color, | |
| description: labelConfig.description, | |
| }); | |
| core.info(`Updated label: ${labelConfig.name}`); | |
| } else { | |
| // Create new label | |
| await github.rest.issues.createLabel({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| name: labelConfig.name, | |
| color: labelConfig.color, | |
| description: labelConfig.description, | |
| }); | |
| core.info(`Created label: ${labelConfig.name}`); | |
| } | |
| } catch (error) { | |
| core.warning(`Failed to create/update label ${labelConfig.name}: ${error.message}`); | |
| } | |
| } | |
| - name: Add package labels | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const prNumber = context.payload.pull_request.number; | |
| const labelsToAdd = []; | |
| // Determine which labels to add based on detected changes | |
| if ('${{ steps.changes.outputs.package_react }}' === 'true') { | |
| labelsToAdd.push('react'); | |
| } | |
| if ('${{ steps.changes.outputs.package_react_native }}' === 'true') { | |
| labelsToAdd.push('react-native'); | |
| } | |
| if ('${{ steps.changes.outputs.package_core }}' === 'true') { | |
| labelsToAdd.push('core'); | |
| } | |
| if (labelsToAdd.length === 0) { | |
| core.info('No package labels to add'); | |
| return; | |
| } | |
| // Get current PR labels | |
| const { data: pr } = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: prNumber, | |
| }); | |
| const currentLabels = pr.labels.map(label => label.name); | |
| const packageLabels = ['react', 'react-native', 'core']; | |
| // Remove existing package labels that are no longer applicable | |
| const labelsToRemove = packageLabels.filter( | |
| label => currentLabels.includes(label) && !labelsToAdd.includes(label) | |
| ); | |
| // Add new labels that aren't already present | |
| const labelsToAddNew = labelsToAdd.filter( | |
| label => !currentLabels.includes(label) | |
| ); | |
| // Remove labels that are no longer applicable | |
| if (labelsToRemove.length > 0) { | |
| core.info(`Removing labels: ${labelsToRemove.join(', ')}`); | |
| for (const label of labelsToRemove) { | |
| await github.rest.issues.removeLabel({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber, | |
| name: label, | |
| }); | |
| } | |
| } | |
| // Add new labels | |
| if (labelsToAddNew.length > 0) { | |
| core.info(`Adding labels: ${labelsToAddNew.join(', ')}`); | |
| await github.rest.issues.addLabels({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber, | |
| labels: labelsToAddNew, | |
| }); | |
| } else { | |
| core.info('All applicable labels are already present'); | |
| } |