name: Label non-Gittensor PRs on: pull_request_target: types: - opened - reopened permissions: pull-requests: write jobs: label-pr: runs-on: ubuntu-latest steps: - name: Add not-gittensor label for matched authors uses: actions/github-script@v7 env: GITTENSOR_USERS: ${{ vars.GITTENSOR_USERS || '[]' }} GITTENSOR_EXCEPTIONS: ${{ vars.GITTENSOR_EXCEPTIONS || '[]' }} TARGET_LABEL: not-gittensor with: script: | const parseList = (raw, name) => { try { const parsed = JSON.parse(raw || '[]'); if (!Array.isArray(parsed)) { core.setFailed(`${name} must be a JSON array.`); return []; } return parsed.map((value) => String(value).toLowerCase()); } catch (error) { core.setFailed(`Failed to parse ${name}: ${error.message}`); return []; } }; const author = context.payload.pull_request.user.login.toLowerCase(); const users = new Set(parseList(process.env.GITTENSOR_USERS, 'GITTENSOR_USERS')); const exceptions = new Set(parseList(process.env.GITTENSOR_EXCEPTIONS, 'GITTENSOR_EXCEPTIONS')); if (!users.has(author) || exceptions.has(author)) { core.info(`No label needed for @${author}.`); return; } const existingLabels = context.payload.pull_request.labels.map((label) => label.name); if (existingLabels.includes(process.env.TARGET_LABEL)) { core.info(`Label ${process.env.TARGET_LABEL} already present.`); return; } await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.payload.pull_request.number, labels: [process.env.TARGET_LABEL], }); core.info(`Added ${process.env.TARGET_LABEL} to PR #${context.payload.pull_request.number}.`);