{"id":15192267,"url":"https://github.com/graphql/wgutils","last_synced_at":"2025-10-19T11:30:27.879Z","repository":{"id":216803678,"uuid":"742369862","full_name":"graphql/wgutils","owner":"graphql","description":"CLI utility to help with managing working groups","archived":false,"fork":false,"pushed_at":"2024-12-19T13:40:30.000Z","size":68,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-01-29T13:03:27.707Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/graphql.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-12T10:20:28.000Z","updated_at":"2024-12-19T13:40:33.000Z","dependencies_parsed_at":"2024-01-13T00:17:18.353Z","dependency_job_id":"f34adbc7-c6d2-43c2-beb5-f2ca47c4cb5b","html_url":"https://github.com/graphql/wgutils","commit_stats":{"total_commits":32,"total_committers":1,"mean_commits":32.0,"dds":0.0,"last_synced_commit":"2603abbbff3e18fb0e82a496455a8eb962eba3f8"},"previous_names":["graphql/wgutils"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphql%2Fwgutils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphql%2Fwgutils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphql%2Fwgutils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphql%2Fwgutils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphql","download_url":"https://codeload.github.com/graphql/wgutils/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237116410,"owners_count":19258244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-27T21:20:55.704Z","updated_at":"2025-10-19T11:30:27.874Z","avatar_url":"https://github.com/graphql.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wgutils\n\nThis is a utility command to help with managing Working Groups. It was designed\nfor the GraphQL Working Groups, but could be used for other projects that work\nin a similar way (if this is of interest, get in touch and we can figure out\nhow to make it even more configurable).\n\n## Installation\n\n```sh\nyarn add wgutils\n```\n\n## wgutils init\n\nCreate an example `wg.config.js` file with the `wgutils init` command:\n\n```sh\nwgutils init\n```\n\nThen edit this file and customize it for the local repository.\n\n## wg.config.js\n\nMain options:\n\n- `name` - name of the WG, e.g. `\"GraphQL WG\"`\n- `repoUrl` - the root URL to the repo, e.g. `\"https://github.com/graphql/graphql-wg\"`\n- `videoConferenceDetails` - the video conference URL; gets interpolated into the markdown, so if additional details (e.g. password) are required include them indented after a newline\n- `liveNotesUrl` - the URL to the Google Doc that is used for the live notes\n- `attendeesTemplate` - a markdown table for your attendees to populate\n- `timezone` - `US/Pacific` or `UTC` or similar; what time governs your meeting times. Critical for international daylight savings time.\n- `frequency` - `monthly` or `weekly` - how frequently do you meet\n- `weekday` - `M`, `Tu`, `W`, `Th`, `F`, `Sa` or `Su` - which day of the week do you meet on?\n- `time` - the time range of the meeting in strict 24 hour range format: `HH:MM-HH:MM` (e.g. `12:30-14:00`)\n\nWhen `frequency = 'monthly'`:\n\n- `nth` - 1-4 - which of the `weekdays` do you meet on?\n- `secondaryMeetings` - are there additional meetings? If so, a list of them:\n  - `nth` - which instance\n  - `dayOffset` (_optional_) - if this meeting is a different day of the week, how does it relate to the normal schedule? (e.g. if you normally meet Thursdays, then Wednesday would be `-1`)\n  - `time` - the time range of the meeting in strict 24 hour range format: `HH:MM-HH:MM` (e.g. `12:30-14:00`)\n  - `name` (_optional_) - a name for this secondary meeting\n  - `description` (_optional_) - a description for this secondary meeting\n  - `filenameFragment` (_optional_) - extra text to add to the agenda filename\n\nWhen `frequency = 'weekly'`:\n\n- `primaryN` - which meeting is the primary (if any)? We really only support this being `1` right now...\n\nOptional but important options:\n\n- `joiningAMeetingFile` (_optional_) - if your repository contains a \"JoiningAMeeting.md\" file, name it here and we'll embed parts into the agendas\n- `description` (_optional_) - description of the working group; will appear in agendas\n- `dateAndTimeLocations` (_optional_) - the locations to add to the end of the `dateandtime.com` URL for the time of the meeting\n- `filenameFragment` (_optional_) - extra text to add to the agenda filename\n\nOptions that are unlikely to be overridden for new projects:\n\n- `links` (_optional_) - an object defining some named links to use in the markdown (e.g. from the `description`)\n- `repoSubpath` (_optional_) - if the `agendas`/etc folder is not in the root, the relative path to it. Unlikely you'll need this.\n- `agendasFolder` (_optional_) - the name of the folder the agendas are stored in (i.e. `\"agendas\"`), relative to `repoSubpath` (or the repo root)\n\n## wgutils agenda gen\n\nGenerates agenda files for the given year and month, according to the settings\nin `wg.config.js`.\n\nExample: generate the agenda file(s) for April 2024:\n\n```sh\nwgutils agenda gen 2024 4\n```\n\n## wgutils can-automerge\n\nFirst, and **SUPER IMPORTANT**, make sure that your `main` branch is configured\nwith branch protections, and that EasyCLA is listed in the list of required\nchecks to pass.\n\nThen you can add it to your repo with a GitHub action such as:\n\n```yml\nname: Agenda auto-merge\n\non:\n  pull_request_target:\n    types: [synchronize, opened, reopened]\n\npermissions:\n  contents: write\n  pull-requests: read\n  checks: read\n\njobs:\n  validate-and-merge:\n    if: ${{ github.event.pull_request.base.ref == 'main' }}\n    runs-on: ubuntu-latest\n\n    steps:\n      # SECURITY: it's critical we do not check out the source pull request!\n      - name: Checkout the main branch\n        uses: actions/checkout@v3\n        with:\n          ref: main\n\n      # We need wgutils to be installed\n      - run: yarn install\n\n      - name: Wait for checks to pass\n        env:\n          GH_TOKEN: ${{ github.token }}\n        run: |\n          # Give 15 seconds for any checks to register\n          sleep 15\n\n          # Wait for checks to pass\n          gh pr checks ${{ github.event.pull_request.number }} --fail-fast --watch --required 2\u003e\u00261 || true\n          # Now get the result in JSON\n          CHECKS_OUTPUT=\"$(gh pr checks ${{ github.event.pull_request.number }} --required --json bucket --jq 'map(.bucket == \"pass\") | all' 2\u003e\u00261 || true)\"\n\n          if echo \"$CHECKS_OUTPUT\" | grep -q \"no required checks reported\"; then\n            echo \"Not required: $CHECKS_OUTPUT\"\n          elif [[ \"$CHECKS_OUTPUT\" == \"true\" ]]; then\n            echo \"$CHECKS_OUTPUT\"\n          else\n            echo \"PR state failed? $CHECKS_OUTPUT\"\n            exit 1\n          fi\n\n      - name: Automerge if wgutils approves\n        env:\n          GH_TOKEN: ${{ github.token }}\n        run: |\n          if yarn wgutils can-automerge \"${{ github.event.pull_request.number }}\" \"${{ github.event.pull_request.head.sha }}\"; then\n            gh pr merge \"${{ github.event.pull_request.number }}\" --squash --auto --match-head-commit \"${{ github.event.pull_request.head.sha }}\"\n          fi\n```\n\n## Current limitations\n\nThese are known limitations of the software that we won't bother to address\nunless there's a need to do so:\n\n- Primary meeting must be the first meeting in the month (otherwise 'prior\n  meetings' is not populated correctly)\n- The automerge system only works with `/agendas` root level folder currently - needs updating to work with the configured agendas path.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphql%2Fwgutils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphql%2Fwgutils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphql%2Fwgutils/lists"}