├── .gitignore ├── package.json ├── w3c.json ├── .github ├── session-created.md ├── workflows │ ├── sync-spreadsheet.yml │ ├── validate-session-manual.yml │ ├── view-event.yml │ ├── validate-grid.yml │ ├── setup-irc.yml │ ├── add-minutes.yml │ ├── view-registrants.yml │ ├── update-calendar.yml │ ├── suggest-grid.yml │ └── validate-session.yml └── ISSUE_TEMPLATE │ └── session.yml └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | config.json 2 | node_modules 3 | tools/appscript/bundle.js 4 | .clasp.json -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "tpac-breakouts": "github:w3c/tpac-breakouts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /w3c.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": [106] 3 | , "contacts": ["tidoust", "ianbjacobs"] 4 | , "repo-type": "project" 5 | } 6 | -------------------------------------------------------------------------------- /.github/session-created.md: -------------------------------------------------------------------------------- 1 | Thank you for proposing a session! 2 | 3 | You may update the session description as needed and at any time before the meeting, but please keep in mind that tooling relies on issue formatting: [follow the instructions](https://github.com/w3c/tpac-breakouts/wiki/Good-Practices-for-Session-Chairs#how-to-propose-a-session) and leave all headings and other formatting intact in particular. Bots and W3C meeting organizers may also update the description, to fix formatting issues or add links and other relevant information. Please do not revert these changes. Feel free to use comments to raise questions. 4 | 5 | Do not expect formal approval; W3C meeting organizers endeavor to schedule all proposed sessions that are [in scope for a breakout](https://github.com/w3c/tpac-breakouts/wiki/Policies#session-scope). Actual scheduling should take place shortly before the meeting. 6 | -------------------------------------------------------------------------------- /.github/workflows/sync-spreadsheet.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Export to a Google spreadsheet" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | sheet: 7 | description: 'The ID of the Google spreadsheet where data needs to be exported' 8 | required: true 9 | type: string 10 | 11 | jobs: 12 | suggest-grid: 13 | name: Export data to Google spreadsheet 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Setup node.js 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: 20 20 | 21 | - name: Checkout latest version of release script 22 | uses: actions/checkout@v4 23 | with: 24 | ref: main 25 | 26 | - name: Install dependencies 27 | run: npm ci 28 | 29 | - name: Dump key file 30 | run: echo '${{ secrets.GOOGLE_KEY }}' > key.json 31 | 32 | - name: Export data 33 | run: npx tpac-breakouts sync-sheet --sheet ${{ inputs.sheet }} 34 | env: 35 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 36 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 37 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 38 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 39 | W3CID_MAP: ${{ vars.W3CID_MAP }} 40 | GOOGLE_KEY_FILE: key.json 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # W3C Breakouts Day 2025 2 | 3 | This repo is for the W3C community to propose and organize breakout sessions for [W3C Breakouts Day 2025](https://www.w3.org/2025/03/breakouts-day-2025/). Sessions will take place on **Wednesday, 26 March 2025 (UTC)**. A few days before the event we will publish the schedule of breakout sessions. 4 | 5 | * [List of proposed sessions](../../issues). We welcome expressions of support (through emojis), questions, and other comments. 6 | * [Schedule up to breakouts day](https://github.com/w3c/breakouts-day-2025/wiki/Meeting-Planner-Resources) including deadline for proposals (12 March). 7 | * [Time slots](https://github.com/w3c/breakouts-day-2025/wiki/Session-Time-Slots) 8 | * [W3C Calendar of breakout sessions](https://www.w3.org/calendar/breakouts-day-2025/). 9 | * [Good Practices for Session Chairs](https://github.com/w3c/tpac-breakouts/wiki/Good-Practices-for-Session-Chairs), including instructions for proposing a breakout session, training for your session, and tips for running your session. 10 | * [Breakout policies](https://github.com/w3c/breakouts-day-2025/wiki/Policies) regarding session scope, participation, and how the meeting planners optimize scheduling and room assignments. 11 | 12 | # Audience 13 | 14 | The goal of the day is to foster discussion among the full W3C community about new or existing topics. 15 | 16 | # Participation 17 | 18 | Anyone with a W3C account (including non-Members) can participate in any session. No fee or registration is required. Members may invite guests to participate. 19 | 20 | # Who can propose a session 21 | 22 | See [Breakouts Day 2025 policies](https://github.com/w3c/breakouts-day-2025/wiki/Policies) for [who can propose a session](https://github.com/w3c/breakouts-day-2025/wiki/Policies#who-can-propose-a-session) 23 | -------------------------------------------------------------------------------- /.github/workflows/validate-session-manual.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Validate a session" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | sessionNumber: 7 | description: 'Session issue number' 8 | required: true 9 | type: string 10 | 11 | jobs: 12 | validate-session: 13 | name: Validate session 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Setup node.js 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: 20 20 | 21 | - name: Checkout latest version of release script 22 | uses: actions/checkout@v4 23 | with: 24 | ref: main 25 | 26 | - name: Install dependencies 27 | run: npm ci 28 | 29 | - name: Validate session and update project fields 30 | run: npx tpac-breakouts validate ${{ inputs.sessionNumber }} --what everything 31 | env: 32 | # URL of the annual TPAC XXXX breakout project. 33 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 34 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 35 | # project belongs to a user. It may be omitted otherwise (or set to 36 | # 'org"'). 37 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 38 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 39 | 40 | # Same valid Personal Access Token (classic version) as above, with 41 | # project and public_repo scope. 42 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 43 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 44 | 45 | # Mapping between chair GitHub identities and W3C IDs must be stored 46 | # in a variable. Structure is a JSON object with identities as keys. 47 | W3CID_MAP: ${{ vars.W3CID_MAP }} 48 | 49 | -------------------------------------------------------------------------------- /.github/workflows/view-event.yml: -------------------------------------------------------------------------------- 1 | name: "[M] View current schedule" 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | view-event: 8 | name: View the current schedule 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Setup node.js 12 | uses: actions/setup-node@v4 13 | with: 14 | node-version: 20 15 | 16 | - name: Checkout latest version of release script 17 | uses: actions/checkout@v4 18 | with: 19 | ref: main 20 | 21 | - name: Install dependencies 22 | run: npm ci 23 | 24 | - name: Create directory to store result 25 | run: mkdir .schedule 26 | 27 | - name: Generate the HTML page 28 | run: npx tpac-breakouts view --format html > .schedule/index.html 29 | env: 30 | # URL of the annual TPAC XXXX breakout project. 31 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 32 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 33 | # project belongs to a user. It may be omitted otherwise (or set to 34 | # 'org"'). 35 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 36 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 37 | 38 | # Same valid Personal Access Token (classic version) as above, with 39 | # project and public_repo scope. 40 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 41 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 42 | 43 | # Mapping between chair GitHub identities and W3C IDs must be stored 44 | # in a variable. Structure is a JSON object with identities as keys. 45 | W3CID_MAP: ${{ vars.W3CID_MAP }} 46 | 47 | - name: Create ZIP artifact 48 | uses: actions/upload-artifact@v4 49 | with: 50 | name: schedule 51 | path: .schedule 52 | -------------------------------------------------------------------------------- /.github/workflows/validate-grid.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Validate all sessions" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | validation: 7 | description: 'Validate only scheduling conflicts (default) or re-validate all sessions' 8 | required: true 9 | default: 'scheduling' 10 | type: choice 11 | options: 12 | - scheduling 13 | - everything 14 | 15 | jobs: 16 | validate-grid: 17 | name: Validate session grid 18 | runs-on: ubuntu-latest 19 | steps: 20 | - name: Setup node.js 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: 20 24 | 25 | - name: Checkout latest version of release script 26 | uses: actions/checkout@v4 27 | with: 28 | ref: main 29 | 30 | - name: Install dependencies 31 | run: npm ci 32 | 33 | - name: Validate grid and update project fields 34 | run: npx tpac-breakouts validate all --what ${{ inputs.validation }} 35 | env: 36 | # URL of the annual TPAC XXXX breakout project. 37 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 38 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 39 | # project belongs to a user. It may be omitted otherwise (or set to 40 | # 'org"'). 41 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 42 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 43 | 44 | # A valid Personal Access Token (classic version) with project 45 | # and public_repo scope. 46 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 47 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 48 | 49 | # Mapping between chair GitHub identities and W3C IDs must be stored 50 | # in a variable. Structure is a JSON object with identities as keys. 51 | W3CID_MAP: ${{ vars.W3CID_MAP }} 52 | 53 | -------------------------------------------------------------------------------- /.github/workflows/setup-irc.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Setup IRC channels" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | sessionNumber: 7 | description: 'Session issue number or "all" to initialize IRC channels for all valid sessions in the slot.' 8 | required: true 9 | default: 'all' 10 | type: string 11 | dismiss: 12 | description: 'Setup channel, or dismiss bots' 13 | required: true 14 | default: 'setup' 15 | type: choice 16 | options: 17 | - setup 18 | - dismiss 19 | 20 | jobs: 21 | update-calendar: 22 | name: Setup IRC channels 23 | runs-on: ubuntu-latest 24 | steps: 25 | - name: Setup node.js 26 | uses: actions/setup-node@v4 27 | with: 28 | node-version: 20 29 | 30 | - name: Checkout latest version of release script 31 | uses: actions/checkout@v4 32 | with: 33 | ref: main 34 | 35 | # Note: no "package-lock.json" and no "npm ci" on purpose to retrieve 36 | # latest version of w3c/tpac-breakouts tools (which are unversioned) 37 | - name: Install dependencies 38 | run: npm install 39 | 40 | - name: Run the setup script 41 | run: npx setup-irc ${{ inputs.sessionNumber }} full ${{ inputs.dismiss }} 42 | env: 43 | # URL of the annual TPAC XXXX breakout project. 44 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 45 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 46 | # project belongs to a user. It may be omitted otherwise (or set to 47 | # 'org"'). 48 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 49 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 50 | 51 | # A valid Personal Access Token (classic version) with project 52 | # and public_repo scope. 53 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 54 | 55 | # Mapping between chair GitHub identities and W3C IDs must be stored 56 | # in a variable. Structure is a JSON object with identities as keys. 57 | CHAIR_W3CID: ${{ vars.CHAIR_W3CID }} 58 | 59 | -------------------------------------------------------------------------------- /.github/workflows/add-minutes.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Link to session minutes" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | sessionNumber: 7 | description: 'Session issue number or "all" to link all possible minutes' 8 | required: true 9 | default: 'all' 10 | type: string 11 | 12 | jobs: 13 | add-minutes: 14 | name: Link to session minutes 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Setup node.js 18 | uses: actions/setup-node@v4 19 | with: 20 | node-version: 20 21 | 22 | - name: Checkout latest version of release script 23 | uses: actions/checkout@v4 24 | with: 25 | ref: main 26 | 27 | # Note: no "package-lock.json" and no "npm ci" on purpose to retrieve 28 | # latest version of w3c/tpac-breakouts tools (which are unversioned) 29 | - name: Install dependencies 30 | run: npm install 31 | 32 | - name: Link to session minutes 33 | run: npx add-minutes ${{ inputs.sessionNumber }} 34 | env: 35 | # URL of the annual TPAC XXXX breakout project. 36 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 37 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 38 | # project belongs to a user. It may be omitted otherwise (or set to 39 | # 'org"'). 40 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 41 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 42 | 43 | # A valid Personal Access Token (classic version) with project 44 | # and public_repo scope. 45 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 46 | 47 | # Information about the team user on behalf of which the updates to 48 | # the calendar will be made. The password must obviously be stored 49 | # as a secret! 50 | W3C_LOGIN: ${{ vars.W3C_LOGIN }} 51 | W3C_PASSWORD: ${{ secrets.W3C_PASSWORD }} 52 | 53 | # Mapping between chair GitHub identities and W3C IDs must be stored 54 | # in a variable. Structure is a JSON object with identities as keys. 55 | CHAIR_W3CID: ${{ vars.CHAIR_W3CID }} 56 | -------------------------------------------------------------------------------- /.github/workflows/view-registrants.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Refresh and view registrants" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | sessionNumber: 7 | description: 'Session issue number or "all" to view/update all valid sessions' 8 | required: true 9 | default: 'all' 10 | type: string 11 | 12 | jobs: 13 | view-event: 14 | name: Refresh and view number of registrants for the meetings 15 | runs-on: ubuntu-latest 16 | steps: 17 | # Starting with Ubuntu 23+, a security feature prevents running Puppeteer 18 | # by default. It needs to be disabled. Using the "easiest" option, see: 19 | # https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md 20 | # https://github.com/puppeteer/puppeteer/pull/13196/files 21 | - name: Disable AppArmor 22 | run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns 23 | 24 | - name: Setup node.js 25 | uses: actions/setup-node@v4 26 | with: 27 | node-version: 20 28 | 29 | - name: Checkout latest version of release script 30 | uses: actions/checkout@v4 31 | with: 32 | ref: main 33 | 34 | - name: Install dependencies 35 | run: npm ci 36 | 37 | - name: Create directory to store result 38 | run: mkdir .registrants 39 | 40 | - name: View/Update registrants 41 | run: npx tpac-breakouts view-registrants ${{ inputs.sessionNumber }} --fetch --save > .registrants/index.md 42 | env: 43 | # URL of the annual TPAC XXXX breakout project. 44 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 45 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 46 | # project belongs to a user. It may be omitted otherwise (or set to 47 | # 'org"'). 48 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 49 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 50 | 51 | # Same valid Personal Access Token (classic version) as above, with 52 | # project and public_repo scope. 53 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 54 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 55 | 56 | # Information about the team user on behalf of which the updates to 57 | # the calendar will be made. The password must obviously be stored 58 | # as a secret! 59 | W3C_LOGIN: ${{ vars.W3C_LOGIN }} 60 | W3C_PASSWORD: ${{ secrets.W3C_PASSWORD }} 61 | 62 | # Mapping between chair GitHub identities and W3C IDs must be stored 63 | # in a variable. Structure is a JSON object with identities as keys. 64 | W3CID_MAP: ${{ vars.W3CID_MAP }} 65 | 66 | - name: Create ZIP artifact 67 | uses: actions/upload-artifact@v4 68 | with: 69 | name: registrants 70 | path: .registrants 71 | -------------------------------------------------------------------------------- /.github/workflows/update-calendar.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Update W3C calendar" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | sessionNumber: 7 | description: 'Session issue number or "all" to convert all valid sessions' 8 | required: true 9 | default: 'all' 10 | type: string 11 | calendarstatus: 12 | description: 'Calendar entry status to use' 13 | required: true 14 | default: 'draft' 15 | type: choice 16 | options: 17 | - draft 18 | - tentative 19 | - confirmed 20 | 21 | jobs: 22 | update-calendar: 23 | name: Update W3C calendar 24 | runs-on: ubuntu-latest 25 | steps: 26 | # Starting with Ubuntu 23+, a security feature prevents running Puppeteer 27 | # by default. It needs to be disabled. Using the "easiest" option, see: 28 | # https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md 29 | # https://github.com/puppeteer/puppeteer/pull/13196/files 30 | - name: Disable AppArmor 31 | run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns 32 | 33 | - name: Setup node.js 34 | uses: actions/setup-node@v4 35 | with: 36 | node-version: 20 37 | 38 | - name: Checkout latest version of release script 39 | uses: actions/checkout@v4 40 | with: 41 | ref: main 42 | 43 | - name: Install dependencies 44 | run: npm ci 45 | 46 | - name: Convert session issues to calendar entries. 47 | run: npx tpac-breakouts sync-calendar ${{ inputs.sessionNumber }} --status ${{ inputs.calendarstatus }} 48 | env: 49 | # URL of the annual TPAC XXXX breakout project. 50 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 51 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 52 | # project belongs to a user. It may be omitted otherwise (or set to 53 | # 'org"'). 54 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 55 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 56 | 57 | # A valid Personal Access Token (classic version) with project 58 | # and public_repo scope. 59 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 60 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 61 | 62 | # Information about the team user on behalf of which the updates to 63 | # the calendar will be made. The password must obviously be stored 64 | # as a secret! 65 | W3C_LOGIN: ${{ vars.W3C_LOGIN }} 66 | W3C_PASSWORD: ${{ secrets.W3C_PASSWORD }} 67 | 68 | # Mapping between rooms and Zoom meetings must be stored in a variable 69 | # (so that it does not get published). Structure is a JSON object 70 | # with room names as keys. 71 | ROOM_ZOOM: ${{ vars.ROOM_ZOOM }} 72 | 73 | # Mapping between chair GitHub identities and W3C IDs must be stored 74 | # in a variable. Structure is a JSON object with identities as keys. 75 | W3CID_MAP: ${{ vars.W3CID_MAP }} 76 | 77 | -------------------------------------------------------------------------------- /.github/workflows/suggest-grid.yml: -------------------------------------------------------------------------------- 1 | name: "[M] Create a schedule" 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | preservelist: 7 | description: 'Space-separated (no comma!) list of session numbers whose meetings must be preserved. Or "all" to preserve all meetings. Or "none" to ignore existing meetings.' 8 | required: true 9 | default: 'all' 10 | type: string 11 | exceptlist: 12 | description: 'Only makes sense when previous value is "all"! Space-separated (no comma!) list of session numbers whose meetings are to be discarded. Or "none" to mean "preserve all meetings".' 13 | required: true 14 | default: 'none' 15 | type: string 16 | apply: 17 | description: 'Whether to suggest a schedule (default) or apply it.' 18 | required: true 19 | default: 'suggest' 20 | type: choice 21 | options: 22 | - suggest 23 | - apply 24 | seed: 25 | description: 'The seed to use to shuffle the array of sessions initially.' 26 | default: '' 27 | type: string 28 | 29 | jobs: 30 | suggest-grid: 31 | name: Create a schedule 32 | runs-on: ubuntu-latest 33 | steps: 34 | - name: Setup node.js 35 | uses: actions/setup-node@v4 36 | with: 37 | node-version: 20 38 | 39 | - name: Checkout latest version of release script 40 | uses: actions/checkout@v4 41 | with: 42 | ref: main 43 | 44 | - name: Install dependencies 45 | run: npm ci 46 | 47 | - name: Create directory to store result 48 | run: mkdir .schedule 49 | 50 | - name: Create a schedule 51 | # Note the use of YAML "folded style" (through `>`) to split the 52 | # command into multiple lines, and of the ternary like operator to set 53 | # CLI parameters correctly. For details, see: 54 | # https://yaml-multiline.info/ 55 | # https://docs.github.com/en/actions/learn-github-actions/expressions#example 56 | run: > 57 | npx tpac-breakouts schedule 58 | --preserve ${{ inputs.preservelist }} 59 | --except ${{ inputs.exceptlist }} 60 | ${{ inputs.seed && format('--seed {0}', inputs.seed) || '' }} 61 | ${{ inputs.apply == 'apply' && ' --apply' || '' }} > .schedule/index.html 62 | env: 63 | # URL of the annual TPAC XXXX breakout project. 64 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 65 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 66 | # project belongs to a user. It may be omitted otherwise (or set to 67 | # 'org"'). 68 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 69 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 70 | 71 | # Same valid Personal Access Token (classic version) as above, with 72 | # project and public_repo scope. 73 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 74 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 75 | 76 | # Mapping between chair GitHub identities and W3C IDs must be stored 77 | # in a variable. Structure is a JSON object with identities as keys. 78 | W3CID_MAP: ${{ vars.W3CID_MAP }} 79 | 80 | - name: Create ZIP artifact 81 | uses: actions/upload-artifact@v4 82 | with: 83 | name: schedule 84 | path: .schedule 85 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/session.yml: -------------------------------------------------------------------------------- 1 | name: Session proposal 2 | description: Propose to chair a breakout session 3 | labels: ["session"] 4 | body: 5 | # This repo includes code that validates instances of the data below. 6 | # The validation code parses this file and uses "id" for some aspects of validation. 7 | # One implication is that labels below can be changed without disrupting some of the validation code. 8 | # However, the validation code in some cases also matches on values of "options" below, so if those change, 9 | # you will need to change the validation code as well. 10 | 11 | - type: markdown 12 | attributes: 13 | value: | 14 | Thank you for proposing to chair a breakout session. Please ensure that the session is [in scope for a breakout](https://github.com/w3c/tpac-breakouts/wiki/Policies#session-scope) and review the [good practices for session chairs](https://github.com/w3c/tpac-breakouts/wiki/Good-Practices-for-Session-Chairs), which includes information about [how you can later update your session](https://github.com/w3c/tpac-breakouts/wiki/Good-Practices-for-Session-Chairs#how-to-update-a-session). 15 | 16 | - type: textarea 17 | id: description 18 | attributes: 19 | label: Session description 20 | description: | 21 | Simple markdown only please (inline formatting, links, lists). 22 | validations: 23 | required: true 24 | 25 | - type: input 26 | id: goal 27 | attributes: 28 | label: Session goal 29 | validations: 30 | required: true 31 | 32 | - type: textarea 33 | id: chairs 34 | attributes: 35 | label: Additional session chairs (Optional) 36 | description: | 37 | GitHub identities of additional session chairs other than you (e.g., `@tidoust, @ianbjacobs`). Space- or comma-separated list. 38 | validations: 39 | required: false 40 | 41 | - type: markdown 42 | attributes: 43 | value: | 44 | ## Logistics 45 | 46 | - type: markdown 47 | attributes: 48 | value: | 49 | > [!Note] 50 | The meeting planners will provide additional logistics information automatically, including calendar information. 51 | 52 | - type: input 53 | id: shortname 54 | attributes: 55 | label: IRC channel (Optional) 56 | description: | 57 | Shortname for the irc.w3.org channel (e.g., `#my-fav-session`). If not provided, shortname will be generated from title. 58 | validations: 59 | required: false 60 | 61 | - type: markdown 62 | attributes: 63 | value: | 64 | ## Preferences 65 | 66 | - type: textarea 67 | id: conflicts 68 | attributes: 69 | label: Other sessions where we should avoid scheduling conflicts (Optional) 70 | description: | 71 | Identify sessions by their issue number in this GitHub repo (e.g., `#32, #18`). Please do not use links, just '#' followed by an issue number. Space- or comma-separated list. Note: When someone chairs 2 or more sessions, we automatically do not schedule those sessions in the same slots, so there is no need to note those conflicts there. 72 | validations: 73 | required: false 74 | 75 | - type: textarea 76 | id: comments 77 | attributes: 78 | label: Instructions for meeting planners (Optional) 79 | description: | 80 | Any information for the meeting planners, including [timing constraints](https://github.com/w3c/tpac2024-breakouts/wiki/Breakout%E2%80%90time%E2%80%90slots) or groups not yet registered where overlap should be avoided. This information will not be exported to the event site or calendar. 81 | validations: 82 | required: false 83 | 84 | - type: markdown 85 | attributes: 86 | value: | 87 | ## Agenda 88 | 89 | - type: textarea 90 | id: agenda 91 | attributes: 92 | label: Agenda for the meeting. 93 | description: | 94 | This part may be completed closer to the meeting. As the agenda becomes available, you will be able to update your session description in markdown to **detail the agenda or link to an external agenda**. Agenda information will be pushed to the calendar. 95 | 96 | - type: markdown 97 | attributes: 98 | value: | 99 | > [!Note] 100 | After the meeting, the meeting planners will add a section to the session description for meeting materials such as links to minutes, presentations, and any recordings. 101 | -------------------------------------------------------------------------------- /.github/workflows/validate-session.yml: -------------------------------------------------------------------------------- 1 | name: "[A] Validate session and update W3C calendar" 2 | 3 | on: 4 | issues: 5 | # Details for types below can be found at: 6 | # https://docs.github.com/en/webhooks-and-events/webhooks/webhook-events-and-payloads?actionType=edited#issues 7 | types: 8 | # Job triggered when an issue is created or re-opened 9 | - opened 10 | - reopened 11 | 12 | # or gets "edited" (title or body updated) 13 | - edited 14 | 15 | jobs: 16 | validate-session: 17 | name: Validate session and update W3C calendar 18 | runs-on: ubuntu-latest 19 | # We're only interested in "session" issues 20 | # and don't want to react to edits made by the bot as a consequence of 21 | # a previous run of this job 22 | if: ${{ !endsWith(github.actor, '-bot') && contains(github.event.issue.labels.*.name, 'session') }} 23 | steps: 24 | # Starting with Ubuntu 23+, a security feature prevents running Puppeteer 25 | # by default. It needs to be disabled. Using the "easiest" option, see: 26 | # https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md 27 | # https://github.com/puppeteer/puppeteer/pull/13196/files 28 | - name: Disable AppArmor 29 | run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns 30 | 31 | - name: Setup node.js 32 | uses: actions/setup-node@v4 33 | with: 34 | node-version: 20 35 | 36 | - name: Checkout latest version of release script 37 | uses: actions/checkout@v4 38 | with: 39 | ref: main 40 | 41 | - name: Install dependencies 42 | run: npm ci 43 | 44 | - name: Add issue to TPAC breakout session project 45 | if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' }} 46 | uses: actions/add-to-project@v0.5.0 47 | with: 48 | # Note: This isn't really necessary since we already made sure that 49 | # issue is a "session" issue 50 | labeled: session 51 | 52 | # URL of the annual TPAC XXXX breakout project. 53 | # The PROJECT_OWNER and PROJECT_NUMBER variables must be defined on 54 | # the repository. PROJECT_OWNER_TYPE needs to be set to "user" if 55 | # project belongs to a user. It may be omitted otherwise (or set to 56 | # 'org"'). 57 | project-url: https://github.com/${{vars.PROJECT_OWNER_TYPE || 'org'}}s/${{vars.PROJECT_OWNER || 'w3c'}}/projects/${{vars.PROJECT_NUMBER}} 58 | 59 | # A valid Personal Access Token (classic version) with project scope 60 | # (and public_repo scope so that labels may be updated) needs to be 61 | # added as secret to the repo, because the action uses the GraphQL 62 | # API under the hoods. 63 | github-token: ${{ secrets.GRAPHQL_TOKEN }} 64 | 65 | - name: Add thank you comment with links to documentation 66 | if: ${{ github.event.action == 'opened' }} 67 | run: gh issue comment "$NUMBER" --body-file "$BODY_FILE" 68 | env: 69 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 70 | GH_REPO: ${{ github.repository }} 71 | NUMBER: ${{ github.event.issue.number }} 72 | BODY_FILE: .github/session-created.md 73 | 74 | - name: Dump changes to local file 75 | run: echo '${{ toJSON(github.event.issue.changes || '{}') }}' > changes.json 76 | shell: bash 77 | 78 | - name: Validate session and update issue labels accordingly 79 | run: npx tpac-breakouts validate ${{ github.event.issue.number }} --changes changes.json --what everything 80 | env: 81 | # See above for PROJECT_XX variables 82 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 83 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 84 | 85 | # Same valid Personal Access Token (classic version) as above, with 86 | # project and public_repo scope. 87 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 88 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 89 | 90 | # Mapping between chair GitHub identities and W3C IDs must be stored 91 | # in a variable. Structure is a JSON object with identities as keys. 92 | W3CID_MAP: ${{ vars.W3CID_MAP }} 93 | 94 | - name: Create/Update calendar entry 95 | run: npx tpac-breakouts sync-calendar ${{ github.event.issue.number }} --quiet 96 | env: 97 | # See above for PROJECT_XX variables 98 | PROJECT_OWNER: ${{ vars.PROJECT_OWNER_TYPE || 'organization' }}/${{ vars.PROJECT_OWNER || 'w3c' }} 99 | PROJECT_NUMBER: ${{ vars.PROJECT_NUMBER }} 100 | 101 | # Same valid Personal Access Token (classic version) as above, with 102 | # project and public_repo scope. 103 | GRAPHQL_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 104 | GH_TOKEN: ${{ secrets.GRAPHQL_TOKEN }} 105 | 106 | # Information about the team user on behalf of which the updates to 107 | # the calendar will be made. The password must obviously be stored 108 | # as a secret! 109 | W3C_LOGIN: ${{ vars.W3C_LOGIN }} 110 | W3C_PASSWORD: ${{ secrets.W3C_PASSWORD }} 111 | 112 | # Mapping between rooms and Zoom meetings must be stored in a variable 113 | # (so that it does not get published). Structure is a JSON object 114 | # with room names as keys. 115 | ROOM_ZOOM: ${{ vars.ROOM_ZOOM }} 116 | 117 | # Mapping between chair GitHub identities and W3C IDs must be stored 118 | # in a variable. Structure is a JSON object with identities as keys. 119 | W3CID_MAP: ${{ vars.W3CID_MAP }} 120 | --------------------------------------------------------------------------------