ptools 0.2.23

Utilities for inspecting Linux processes
---
name: Update repository labels

on:
  push:
    branches:
      - master
    paths:
      - '.github/workflows/labels.yml'
  workflow_dispatch:

jobs:
  update-labels:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    env:
      LABELS_JSON: |
        [
          {"name": "Priority: Critical", "color": "ee0701", "description": "Must be fixed immediately"},
          {"name": "Priority: High", "color": "d93f0b", "description": "Should be fixed soon"},
          {"name": "Priority: Medium", "color": "fbca04", "description": "Normal priority"},
          {"name": "Priority: Low", "color": "0e8a16", "description": "Nice to have"},

          {"name": "Status: Abandoned", "color": "000000", "description": "The issue or pull request is abandoned"},
          {"name": "Status: Blocked", "color": "ee0701", "description": "Progress on the issue is blocked"},
          {"name": "Status: In Progress", "color": "cccccc", "description": "Work in progress (WIP)"},
          {"name": "Status: Proposal", "color": "d4c5f9", "description": "Request for comments (RFC)"},
          {"name": "Status: PR Welcome", "color": "2e7733", "description": "Pull requests welcome"},
          {"name": "Status: Review Needed", "color": "fbca04", "description": "Request for review feedback"},
          {"name": "Status: Need More Info", "color": "f9c90a", "description": "Lacks enough info to make progress"},
          {"name": "Status: Duplicate", "color": "cfd3d7", "description": "This issue or pull request already exists"},
          {"name": "Status: Won't Fix", "color": "ffffff", "description": "This will not be worked on"},

          {"name": "Type: Task", "color": "fbca04", "description": "A specific piece of work"},
          {"name": "Type: Bug", "color": "d73a4a", "description": "An unexpected problem or behavior"},
          {"name": "Type: Enhancement", "color": "a2eeef", "description": "A request, idea, or new functionality"},
          {"name": "Type: CI", "color": "000000", "description": "Pull requests that update CI code"},
          {"name": "Type: Dependencies", "color": "0366d6", "description": "Pull requests that update a dependency file"},
          {"name": "Type: Documentation", "color": "0075ca", "description": "Improvements or additions to documentation"},
          {"name": "Type: Question", "color": "d876e3", "description": "Further information is requested"},

          {"name": "Component: Other", "color": "0e8a16", "description": "Catch-all component for issues not covered by other components"},
          {"name": "Component: Process Handle", "color": "0e8a16", "description": "Issues related to process handles"},
          {"name": "Component: Process Source", "color": "0e8a16", "description": "Issues related to process sources"},
          {"name": "Component: pargs", "color": "0e8a16", "description": "Issues related to pargs(1)"},
          {"name": "Component: pauxv", "color": "0e8a16", "description": "Issues related to pauxv(1)"},
          {"name": "Component: pcred", "color": "0e8a16", "description": "Issues related to pcred(1)"},
          {"name": "Component: penv", "color": "0e8a16", "description": "Issues related to penv(1)"},
          {"name": "Component: pfiles", "color": "0e8a16", "description": "Issues related to pfiles(1)"},
          {"name": "Component: plgrp", "color": "0e8a16", "description": "Issues related to plgrp(1)"},
          {"name": "Component: plimit", "color": "0e8a16", "description": "Issues related to plimit(1)"},
          {"name": "Component: plockstat", "color": "0e8a16", "description": "Issues related to plockstat(1)"},
          {"name": "Component: pmadvise", "color": "0e8a16", "description": "Issues related to pmadvise(1)"},
          {"name": "Component: ppgsz", "color": "0e8a16", "description": "Issues related to ppgsz(1)"},
          {"name": "Component: ppriv", "color": "0e8a16", "description": "Issues related to ppriv(1)"},
          {"name": "Component: preap", "color": "0e8a16", "description": "Issues related to preap(1)"},
          {"name": "Component: prun", "color": "0e8a16", "description": "Issues related to prun(1)"},
          {"name": "Component: psecflags", "color": "0e8a16", "description": "Issues related to psecflags(1)"},
          {"name": "Component: psig", "color": "0e8a16", "description": "Issues related to psig(1)"},
          {"name": "Component: pstack", "color": "0e8a16", "description": "Issues related to pstack(1)"},
          {"name": "Component: pstop", "color": "0e8a16", "description": "Issues related to pstop(1)"},
          {"name": "Component: ptime", "color": "0e8a16", "description": "Issues related to ptime(1)"},
          {"name": "Component: ptree", "color": "0e8a16", "description": "Issues related to ptree(1)"},
          {"name": "Component: pwait", "color": "0e8a16", "description": "Issues related to pwait(1)"}
        ]
    steps:
      - uses: actions/github-script@v9.0.0
        with:
          script: |
            const labels = JSON.parse(process.env.LABELS_JSON);
            for (const label of labels) {
              try {
                await github.rest.issues.createLabel({
                  owner: context.repo.owner,
                  repo: context.repo.repo,
                  name: label.name,
                  description: label.description || '',
                  color: label.color
                });
                console.log(`Created label '${label.name}'.`);
              } catch (error) {
                if (error.status === 422) {
                  try {
                    await github.rest.issues.updateLabel({
                      owner: context.repo.owner,
                      repo: context.repo.repo,
                      name: label.name,
                      description: label.description || '',
                      color: label.color
                    });
                    console.log(`Updated label '${label.name}'.`);
                  } catch (updateError) {
                    console.error(`Error updating label '${label.name}': ${updateError}`);
                  }
                } else {
                  console.error(`Error creating label '${label.name}': ${error}`);
                }
              }
            }