diff --git a/.DS_Store b/.DS_Store index ae3e8d09..4cd1e457 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..b557e85a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,61 @@ +name: "πŸ› Bug Report" +description: "Create a report to help us improve our community workflows" +title: "πŸ› Bug: " +labels: ["πŸ› Bug", "Status: Triage"] + +body: +- type: textarea + attributes: + label: "Describe the bug" + description: "A clear and concise description of what the bug is" + validations: + required: true +- type: textarea + attributes: + label: "Steps To Reproduce" + description: "Steps to reproduce the behavior" + placeholder: | + 1. Go to'...' + 2. Click on'...' + 3. Scroll down to'...' + 4. See error + validations: + required: true +- type: textarea + attributes: + label: "Expected Behavior" + description: "A clear and concise description of what you expected to happen" + validations: + required: true +- type: textarea + attributes: + label: "Screenshots" + description: | + If applicable, add screenshots to help explain your problem + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in + validations: + required: false +- type: textarea + attributes: + label: "Device Information [optional]" + description: | + examples: + - **OS**: Ubuntu 20.04 + - **Browser**: chrome + - **version**: 22 + value: | + - OS: + - Browser: + - version: + render: markdown + validations: + required: false +- type: dropdown + attributes: + label: "Are you working on this issue?" + options: + - 'Yes' + - 'No' + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/open_community_working_meeting.md b/.github/ISSUE_TEMPLATE/open_community_working_meeting.md index fd9b6cbf..17e06281 100644 --- a/.github/ISSUE_TEMPLATE/open_community_working_meeting.md +++ b/.github/ISSUE_TEMPLATE/open_community_working_meeting.md @@ -3,9 +3,14 @@ name: Open Community Working Meeting about: Regular Open Community Working Meetings Issue - This template is for those setting up an OCWM only. --- -# Open Community Working Meeting 2022-MM-DD - 14:00 PT +# Open Community Working Meeting 2022-MM-DD - 13:00 PT -Zoom Meeting link: https://postman.zoom.us/j/89562933116?pwd=OWlsQ0RrcDY4S1JQU2d2Q2M0aFFlZz09 +Google Meet joining info - Video call link: https://meet.google.com/raz-ptdn-ewf + +You can find these events scheduled on our **[JSON Schema Community Calendar](https://calendar.google.com/calendar/u/0/embed?src=info@json-schema.org)**. + +To add the events to your Google Calendar, use the link found in the bottom right of the above calendar. +To add the events to another calendar, use the provided [ics/ical file](https://calendar.google.com/calendar/ical/info%40json-schema.org/public/basic.ics). **Meeting accessibility**: - We would like to record the meeting for future reference and for those who are not able to attend in person. diff --git a/.github/ISSUE_TEMPLATE/workflow_suggestion.yml b/.github/ISSUE_TEMPLATE/workflow_suggestion.yml new file mode 100644 index 00000000..179d2e41 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/workflow_suggestion.yml @@ -0,0 +1,40 @@ +name: "πŸ’‘ Community Workflow Suggestion" +description: "Suggest a new community workflow" +title: "πŸ’‘ Community Workflow proposal: " +labels: ["✨ Enhancement", "Status: Triage"] + +body: +- type: textarea + attributes: + label: "Description" + description: "A clear and concise description of the suggested workflow" + validations: + required: true +- type: textarea + attributes: + label: "Objective" + description: "What is the main goal or purpose of this workflow?" + validations: + required: true +- type: textarea + attributes: + label: "Steps" + description: "List the steps of the suggested workflow" + placeholder: | + 1. Step 1 + 2. Step 2 + 3. Step 3 + validations: + required: true +- type: textarea + attributes: + label: "Expected Outcome" + description: "A clear and concise description of what you expect to achieve with this workflow" + validations: + required: true +- type: textarea + attributes: + label: "Additional Context [optional]" + description: "Add any other context or information about the suggested workflow here" + validations: + required: false diff --git a/.github/workflows/Validate Ambassadors JSON.yml b/.github/workflows/Validate Ambassadors JSON.yml new file mode 100644 index 00000000..2d9b1653 --- /dev/null +++ b/.github/workflows/Validate Ambassadors JSON.yml @@ -0,0 +1,53 @@ +name: Validate Ambassadors JSON + +on: + push: + paths: + - 'programs/ambassadors/ambassadors.json' + pull_request: + paths: + - 'programs/ambassadors/ambassadors.json' + +jobs: + validate-json: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Node 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Dependencies + run: npm install ajv ajv-formats + + - name: Validate ambassadors.json + run: | + node -e " + const Ajv = require('ajv/dist/2020'); + const addFormats = require('ajv-formats'); + const path = require('path'); + const fs = require('fs'); + const ambassadorsDir = path.join(process.env.GITHUB_WORKSPACE, 'programs', 'ambassadors'); + const schemaPath = path.join(ambassadorsDir, 'ambassadors-schema.json'); + const dataPath = path.join(ambassadorsDir, 'ambassadors.json'); + try { + const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf-8')); + const data = JSON.parse(fs.readFileSync(dataPath, 'utf-8')); + const ajv = new Ajv({ allErrors: true }); + addFormats(ajv); + const validate = ajv.compile(schema); + const valid = validate(data); + if (!valid) { + console.error('Validation failed:', validate.errors); + process.exit(1); + } else { + console.log('ambassadors.json is valid.'); + } + } catch (error) { + console.error('Error validating ambassadors.json:', error); + process.exit(1); + }" diff --git a/.github/workflows/close-completed-ocwm.yml b/.github/workflows/close-completed-ocwm.yml index 4bb8f148..301007a2 100644 --- a/.github/workflows/close-completed-ocwm.yml +++ b/.github/workflows/close-completed-ocwm.yml @@ -2,7 +2,7 @@ name: Close issues with no tasks and a specific label on: schedule: - - cron: '0 0 * * 0' # Runs every Sunday at midnight + - cron: '0 0 15-21 * 0' # Runs at midnight on the third Sunday of the month repository_dispatch: types: close-issues-ocwm @@ -11,23 +11,30 @@ jobs: close-issues: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - name: Set up Node 18 - uses: actions/setup-node@v2 + - name: Set up Node 20 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' + - name: Get Token + uses: actions/create-github-app-token@v1 + id: get_workflow_token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + - name: Install dependencies - run: npm install @octokit/core + run: npm install @octokit/core@5.1.0 - name: Close issues env: - MY_TOKEN: ${{ secrets.AUTH_TOKEN }} + MY_TOKEN: ${{ steps.get_workflow_token.outputs.token }} MY_LABEL: ${{ vars.OCWM_LABEL }} OWNER: ${{ vars.ORGANISATION }} REPO_NAMES: ${{ vars.REPOSITORIES }} - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/failed-actions-notify.yml b/.github/workflows/failed-actions-notify.yml new file mode 100644 index 00000000..54ab2644 --- /dev/null +++ b/.github/workflows/failed-actions-notify.yml @@ -0,0 +1,37 @@ +name: Slack Notifications for Failed GitHub Actions + +on: + workflow_run: + workflows: ["*"] + types: + - completed + branches: + - main + +permissions: + actions: read + +jobs: + on-failure: + runs-on: ubuntu-latest + if: | + (github.event.workflow_run.conclusion == 'failure' || + github.event.workflow_run.conclusion == 'timed_out') && + github.event.workflow_run.name != 'Slack Notifications for Failed GitHub Actions' + timeout-minutes: 10 + steps: + - name: Send Slack Notification + uses: ravsamhq/notify-slack-action@v2 + with: + status: ${{ github.event.workflow_run.conclusion }} + notification_title: " ${{github.event.workflow_run.name}} - ${{github.event.workflow_run.conclusion}} on ${{github.event.workflow_run.head_branch}} - <${{github.server_url}}/${{github.repository}}/actions/runs/${{github.event.workflow_run.id}}|View Failure>" + message_format: ":fire: *${{github.event.workflow_run.name}}* ${{github.event.workflow_run.conclusion}} in <${{github.server_url}}/${{github.repository}}/${{github.event.workflow_run.head_branch}}|${{github.repository}}>" + footer: "Linked Repo <${{github.server_url}}/${{github.repository}}|${{github.repository}}> | <${{github.server_url}}/${{github.repository}}/actions/runs/${{github.event.workflow_run.id}}|View Failure>" + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_WORKFLOW_NOTIF }} + + - name: Check Slack Notification Status + if: failure() + run: | + echo "Failed to send Slack notification" + echo "Workflow Run ID: ${{ github.event.workflow_run.id }}" diff --git a/.github/workflows/ocwm-creator.yml b/.github/workflows/ocwm-creator.yml index 653ad844..64a4c53d 100644 --- a/.github/workflows/ocwm-creator.yml +++ b/.github/workflows/ocwm-creator.yml @@ -1,8 +1,8 @@ -name: Create OCWM weekly +name: Create OCWM Monthly on: schedule: - - cron: "0 9 * * 2" # Run every Tuesday at 9:00 AM + - cron: "0 23 * * 2" # Runs at 11:00 PM every Tuesday repository_dispatch: types: ocwm-creator @@ -12,37 +12,79 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repository - uses: actions/checkout@v2 - - name: Set up Node 18 - uses: actions/setup-node@v2 + uses: actions/checkout@v4 + - name: Set up Node 20 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' + + - name: Get Token + uses: actions/create-github-app-token@v1 + id: get_workflow_token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: '3.8' + - name: Generate Issue Title id: create-title run: | - date=$(date -u -d "6 days" +%Y-%m-%d) - echo "title=Open Community Working Meeting ${date} - 14:00 PT" >> "$GITHUB_OUTPUT" + # Get the first day of the next month + next_month=$(date -u -d "$(date +%Y-%m-01) +1 month" +%Y-%m-01) + + # Find the first Monday of the next month + first_monday=$(date -u -d "$next_month +$(( (8 - $(date -u -d "$next_month" +%u)) % 7 )) days" +%Y-%m-%d) + + # Calculate the third Monday by adding 14 days to the first Monday + third_monday=$(date -u -d "$first_monday +14 days" +%Y-%m-%d) + + # Output the issue title with the third Monday's date + echo "title=Open Community Working Meeting ${third_monday} - 13:00 PT" >> "$GITHUB_OUTPUT" + + # Step to check if it's the third Tuesday of the month + - name: Check if today is the third Tuesday + id: check-third-tuesday + run: | + day=$(date +%d) + dow=$(date +%u) # Day of the week (1 = Monday, ..., 7 = Sunday) + # Check if the day is between 15th and 21st, and if it's Tuesday (2) + if [ "$dow" -ne 2 ]; then + echo "Not a Tuesday, exiting..." + echo "::set-output name=is-third-tuesday::false" + exit 0 + fi + if [ "$day" -ge 15 ] && [ "$day" -le 21 ]; then + echo "This is the third Tuesday of the month!" + echo "::set-output name=is-third-tuesday::true" + else + echo "Not the third Tuesday, exiting..." + echo "::set-output name=is-third-tuesday::false" + exit 0 + fi - name: Create Issue using Template id: create-issue - uses: peter-evans/create-issue-from-file@v4 + if: steps.check-third-tuesday.outputs.is-third-tuesday == 'true' + uses: peter-evans/create-issue-from-file@v5 with: title: ${{ steps.create-title.outputs.title }} content-filepath: .github/ISSUE_TEMPLATE/open_community_working_meeting.md labels: 'Working Meeting' - token: ${{ secrets.AUTH_TOKEN }} + token: ${{ steps.get_workflow_token.outputs.token }} - name: Install dependencies - run: npm install @octokit/core + run: npm install @octokit/core@5.1.0 - name: Update Issue Body - uses: actions/github-script@v6 + if: steps.check-third-tuesday.outputs.is-third-tuesday == 'true' + uses: actions/github-script@v7 env: - MY_TOKEN: ${{ secrets.AUTH_TOKEN }} + MY_TOKEN: ${{ steps.get_workflow_token.outputs.token }} + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} with: script: | @@ -56,7 +98,7 @@ jobs: const ocwmnumber = ${{ steps.create-issue.outputs.issue-number }}; const { data: ocwmissue } = await mygithub.request(`GET /repos/${context.repo.owner}/${context.repo.repo}/issues/${ ocwmnumber }`, { - }) + }); console.log("OCWM Issue:" + JSON.stringify(ocwmissue)); @@ -66,4 +108,22 @@ jobs: body: newBody, milestone: null, state: 'open', - }) + }); + + const newTitle = ocwmissue.title; + const issueDate = newTitle.replace(/Open Community Working Meeting /g, ""); + + // Notify Slack + const SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK; + const SLACK_MESSAGE = `{ + "issue": "https://github.com/${context.repo.owner}/${context.repo.repo}/issues/${ocwmnumber}", + "date": "${issueDate}" + }`; + + await fetch(SLACK_WEBHOOK_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: SLACK_MESSAGE, + }); diff --git a/.github/workflows/ocwm-issue-collector.yml b/.github/workflows/ocwm-issue-collector.yml index 4b5c3b42..1f8135ff 100644 --- a/.github/workflows/ocwm-issue-collector.yml +++ b/.github/workflows/ocwm-issue-collector.yml @@ -2,7 +2,7 @@ name: Search for issues and PR labeled 'agenda' and add them to the agenda on: schedule: - - cron: '0 0 * * 0' # Runs every Sunday at midnight + - cron: '0 1 * * 1' # Runs at 1:00 AM every Monday repository_dispatch: types: add-issues-ocwm @@ -11,15 +11,47 @@ jobs: search_and_add: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up Node 18 - uses: actions/setup-node@v2 + - uses: actions/checkout@v4 + - name: Set up Node 20 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' + + - name: Get Token + uses: actions/create-github-app-token@v1 + id: get_workflow_token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + - name: Install dependencies - run: npm install @octokit/core + run: npm install @octokit/core@5.1.0 + + # Step to check if today is the third Monday + - name: Check if today is the third Monday + id: check-third-monday + run: | + day=$(date +%d) + dow=$(date +%u) # Day of the week (1 = Monday, ..., 7 = Sunday) + # Check if the day is between 15th and 21st, and if it's Monday (1) + if [ "$dow" -ne 1 ]; then + echo "Not a Monday, exiting..." + echo "::set-output name=is-third-monday::false" + exit 0 + fi + if [ "$day" -ge 15 ] && [ "$day" -le 21 ]; then + echo "This is the third Monday of the month!" + echo "::set-output name=is-third-monday::true" + else + echo "Not the third Monday, exiting..." + echo "::set-output name=is-third-monday::false" + exit 0 + fi + - name: Adding Issues - uses: actions/github-script@v6 + id: add-issues + if: steps.check-third-monday.outputs.is-third-monday == 'true' + uses: actions/github-script@v7 env: PLACEHOLDER: '' OWNER: ${{ vars.ORGANISATION }} @@ -27,7 +59,7 @@ jobs: REPO_NAMES: ${{ vars.REPOSITORIES }} AGENDA_LABEL: ${{ vars.AGENDA_LABEL }} OCWM_LABEL: ${{ vars.OCWM_LABEL }} - MY_TOKEN: ${{ secrets.AUTH_TOKEN }} + MY_TOKEN: ${{ steps.get_workflow_token.outputs.token }} with: script: | const octokit = require('@octokit/core').Octokit @@ -50,21 +82,18 @@ jobs: const { data: workMeetings } = await mygithub.request(`GET /repos/${process.env.OWNER}/${process.env.REPO}/issues?labels=${targetLabel}&per_page=1`, { }) - console.log("workMeetings:" + JSON.stringify(workMeetings)); for (let r = 0; r < repositories.length; r++) { - - const { data: items2add } = await mygithub.request(`GET /repos/${process.env.OWNER}/${repositories[r]}/issues?labels=${appendLabel}`); console.log("Issues to add:" + JSON.stringify(items2add)); - const query = ` query { search(query: "repo:${process.env.OWNER}/${repositories[r]} is:open label:${appendLabel}", type: DISCUSSION, first: 5) { edges { node { ... on Discussion { + id title body resourcePath @@ -78,7 +107,6 @@ jobs: }`; const response = await mygithub.graphql(query, {}); console.log("Response:" + JSON.stringify(response)); - const discussions = response.search.edges; console.log("Discussions to add:" + JSON.stringify(discussions)); @@ -97,6 +125,7 @@ jobs: let json_text = JSON.stringify(body.substring(0, startIndex - 1) + `\n| ${url} - ${title} | ${author} |\r\n` + body.substring(startIndex, body.length)); body = JSON.parse(json_text); changesFlag = true; + await mygithub.request(`DELETE /repos/${process.env.OWNER}/${repositories[r]}/issues/${items2add[i].number}/labels/${appendLabel}`); } } @@ -120,11 +149,23 @@ jobs: console.log(`PATCH /repos/${process.env.OWNER}/${process.env.REPO}/issues/${workMeetings[0].number}`); + const { data: label } = await mygithub.request(`GET /repos/${process.env.OWNER}/${process.env.REPO}/labels/${process.env.AGENDA_LABEL}`); + await mygithub.request(`PATCH /repos/${process.env.OWNER}/${process.env.REPO}/issues/${workMeetings[0].number}`, { body: parsed, milestone: null, state: 'open', }) + + for (let i = 0; i < discussions.length; i++) { + await mygithub.graphql(` + mutation { + removeLabelsFromLabelable(input: {labelIds: ["${label.node_id}"], labelableId: "${discussions[i].node.id}"}) { + clientMutationId + } + } + `); + } } } catch (err) { @@ -132,4 +173,4 @@ jobs: console.log("There is no OCWM available"); } - } + } \ No newline at end of file diff --git a/.github/workflows/ocwm-pre-meeting-check.yml b/.github/workflows/ocwm-pre-meeting-check.yml new file mode 100644 index 00000000..cf83898f --- /dev/null +++ b/.github/workflows/ocwm-pre-meeting-check.yml @@ -0,0 +1,107 @@ +name: OCWM Pre-Meeting Check + +on: + schedule: + - cron: '50 21 * * 1' # Runs at 11:50 AM PT on the 3rd Monday of the month + +jobs: + check_agenda: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Node 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Get GitHub Token + uses: actions/create-github-app-token@v1 + id: get_workflow_token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + + - name: Install Dependencies + run: npm install @octokit/core@5.1.0 + + # Step to check if today is the third Monday + - name: Check if today is the third Monday + id: check-third-monday + run: | + day=$(date +%d) + dow=$(date +%u) # Day of the week (1 = Monday, ..., 7 = Sunday) + # Check if the day is between 15th and 21st, and if it's Monday (1) + if [ "$dow" -ne 1 ]; then + echo "Not a Monday, exiting..." + echo "::set-output name=is-third-monday::false" + exit 0 + fi + if [ "$day" -ge 15 ] && [ "$day" -le 21 ]; then + echo "This is the third Monday of the month!" + echo "::set-output name=is-third-monday::true" + else + echo "Not the third Monday, exiting..." + echo "::set-output name=is-third-monday::false" + exit 0 + fi + + - name: Check Latest OCWM Issue + id: check_issue + if: steps.check-third-monday.outputs.is-third-monday == 'true' + uses: actions/github-script@v7 + env: + MY_TOKEN: ${{ steps.get_workflow_token.outputs.token }} + OWNER: ${{ vars.ORGANISATION }} + REPO: 'community' + OCWM_LABEL: ${{ vars.OCWM_LABEL }} + TEMPLATE_PATH: '.github/ISSUE_TEMPLATE/open_community_working_meeting.md' + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_GEN_NOTIF }} + with: + script: | + const fs = require('fs'); + const octokit = require('@octokit/core').Octokit; + const mygithub = new octokit({ + request: { fetch: fetch, }, + auth: process.env.MY_TOKEN + }); + + // Read the template from the markdown file + const templateContent = fs.readFileSync(process.env.TEMPLATE_PATH, 'utf8'); + + // Fetch the latest issue with OCWM_LABEL + const { data: issues } = await mygithub.request(`GET /repos/${process.env.OWNER}/${process.env.REPO}/issues?labels=${encodeURIComponent(process.env.OCWM_LABEL)}&per_page=1`); + + if (issues.length === 0) { + console.log("No open community working meeting issues found."); + return; + } + + const latestIssue = issues[0]; + const issueBody = latestIssue.body; + + // Check if the issue body matches the template + if (issueBody.includes(templateContent)) { + console.log("Template matched, cancelling the meeting."); + + // Add a comment to the issue + await mygithub.request(`POST /repos/${process.env.OWNER}/${process.env.REPO}/issues/${latestIssue.number}/comments`, { + body: "The meeting has been cancelled as there is no agenda for today. Thanks everyone!" + }); + + // Send a notification to Slack + const slackPayload = { + text: `The meeting has been cancelled as there is no agenda for today. Thanks everyone!` + }; + + await fetch(process.env.SLACK_WEBHOOK, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(slackPayload) + }); + + } else { + console.log("Agenda found. Meeting will proceed."); + } diff --git a/.github/workflows/ocwm-reminders.yml b/.github/workflows/ocwm-reminders.yml new file mode 100644 index 00000000..ab760d03 --- /dev/null +++ b/.github/workflows/ocwm-reminders.yml @@ -0,0 +1,92 @@ +name: Send reminders to join the OCWM the same day + +on: + schedule: + - cron: '0 15 * * 1' # Runs every Monday at 15:00 + + repository_dispatch: + types: ocwm-reminders + +jobs: + ocwm-reminders: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Set up Node 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Get Token + uses: actions/create-github-app-token@v1 + id: get_workflow_token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + + - name: Install dependencies + run: npm install @octokit/core@5.1.0 + + # Step to check if today is the third Monday + - name: Check if today is the third Monday + id: check-third-monday + run: | + day=$(date +%d) + dow=$(date +%u) # Day of the week (1 = Monday, ..., 7 = Sunday) + # Check if the day is between 15th and 21st, and if it's Monday (1) + if [ "$dow" -ne 1 ]; then + echo "Not a Monday, exiting..." + echo "::set-output name=is-third-monday::false" + exit 0 + fi + if [ "$day" -ge 15 ] && [ "$day" -le 21 ]; then + echo "This is the third Monday of the month!" + echo "::set-output name=is-third-monday::true" + else + echo "Not the third Monday, exiting..." + echo "::set-output name=is-third-monday::false" + exit 0 + fi + + - name: Send reminders + if: steps.check-third-monday.outputs.is-third-monday == 'true' + uses: actions/github-script@v7 + env: + MY_TOKEN: ${{ steps.get_workflow_token.outputs.token }} + OWNER: ${{ vars.ORGANISATION }} + REPO: 'community' + OCWM_LABEL: ${{ vars.OCWM_LABEL }} + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_REMINDER }} + with: + script: | + + const octokit = require('@octokit/core').Octokit; + const mygithub = new octokit({ + request: { fetch: fetch,}, + auth: process.env.MY_TOKEN + }); + + let targetLabel = encodeURIComponent(process.env.OCWM_LABEL); + + const { data: workMeetings } = await mygithub.request(`GET /repos/${process.env.OWNER}/${process.env.REPO}/issues?labels=${targetLabel}&per_page=1`, { + }) + + const issueNumber = workMeetings[0].number + const newTitle = workMeetings[0].title; + const issueDate = newTitle.replace(/Open Community Working Meeting /g, ""); + + // Notify Slack + const SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK; + const SLACK_MESSAGE = `{ + "issue": "https://github.com/${process.env.OWNER}/${process.env.REPO}/issues/${issueNumber}", + "date": "${issueDate}" + }`; + + await fetch(SLACK_WEBHOOK_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: SLACK_MESSAGE, + }); diff --git a/.github/workflows/pr-dependencies.yml b/.github/workflows/pr-dependencies.yml new file mode 100644 index 00000000..34a231dc --- /dev/null +++ b/.github/workflows/pr-dependencies.yml @@ -0,0 +1,12 @@ +name: Check PR Dependencies + +on: pull_request + +jobs: + check_dependencies: + runs-on: ubuntu-latest + name: Check Dependencies + steps: + - uses: gregsdennis/dependencies-action@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/slack-ocwm-reminder.yml b/.github/workflows/slack-ocwm-reminder.yml new file mode 100644 index 00000000..80ddd97d --- /dev/null +++ b/.github/workflows/slack-ocwm-reminder.yml @@ -0,0 +1,161 @@ +name: Send Office Hours Reminders + +on: + schedule: + # Europe/Americas: Last Friday of previous month, first Friday (if before Tuesday), and day of (first Tuesday), even months + - cron: '0 9 25-31 5,7,9,11,1,3 5' # Last Friday of odd months at 9 UTC + - cron: '0 9 1-7 6,8,10,12,2,4 5' # First Friday at 9 UTC in even months + - cron: '0 9 1-7 6,8,10,12,2,4 2' # First Tuesday at 9 UTC in even months + # APAC/Americas: Last Friday of previous month, first Friday (if before Tuesday), and day of (first Tuesday), odd months + - cron: '0 17 25-31 4,6,8,10,12,2 5' # Last Friday of even months at 17 UTC + - cron: '0 17 1-7 7,9,11,1,3,5 5' # First Friday at 17 UTC in odd months + - cron: '0 17 1-7 7,9,11,1,3,5 2' # First Tuesday at 17 UTC in odd months + +jobs: + send-reminders: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Get GitHub App Token + uses: actions/create-github-app-token@v1 + id: get_workflow_token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + + - name: Install dependencies + run: npm install @octokit/core@5.1.0 + + - name: Send reminders + uses: actions/github-script@v7 + env: + GITHUB_TOKEN: ${{ steps.get_workflow_token.outputs.token }} + OWNER: ${{ vars.ORGANISATION }} + REPO: 'community' + OCWM_LABEL: ${{ vars.OCWM_LABEL }} + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_OFFICEHOURS }} + with: + script: | + const { Octokit } = require("@octokit/core"); + const github = new Octokit({ auth: process.env.GITHUB_TOKEN }); + + function getFirstTuesdayOfMonth(year, month) { + let date = new Date(Date.UTC(year, month, 1)); + while (date.getUTCDay() !== 2) { + date.setUTCDate(date.getUTCDate() + 1); + } + return date; + } + + function getLastTuesdayOfMonth(year, month) { + let date = new Date(Date.UTC(year, month + 1, 0)); // Last day of the month + while (date.getUTCDay() !== 2) { + date.setUTCDate(date.getUTCDate() - 1); + } + return date; + } + + function isLastFridayOfMonth(date) { + const lastDayOfMonth = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0)); + const lastFriday = new Date(lastDayOfMonth); + lastFriday.setUTCDate(lastFriday.getUTCDate() - (lastFriday.getUTCDay() + 2) % 7); + return date.getUTCDate() === lastFriday.getUTCDate(); + } + + function isFirstFridayOfMonth(date) { + return date.getUTCDay() === 5 && date.getUTCDate() <= 7; + } + + try { + const today = new Date(); + const currentMonth = today.getUTCMonth(); + const isEuropeAmericas = [5, 7, 9, 11, 1, 3].includes(currentMonth+1); + const isFriday = today.getUTCDay() === 5; + const isTuesday = today.getUTCDay() === 2; + const isLastFriday = isLastFridayOfMonth(today); + const isFirstFriday = isFirstFridayOfMonth(today); + + console.log(`Current date: ${today.toISOString()}, Month: ${currentMonth + 1}, Is Europe/Americas: ${isEuropeAmericas}, Is Friday: ${isFriday}, Is Tuesday: ${isTuesday}, Is Last Friday: ${isLastFriday}, Is First Friday: ${isFirstFriday}`); + + let timezone, time, date; + if (isEuropeAmericas) { + timezone = "Europe/Americas friendly"; + time = "10:00 BST"; + } else { + timezone = "APAC/Americas friendly"; + time = "10:00 PT"; + } + + const firstTuesdayThisMonth = getFirstTuesdayOfMonth(today.getUTCFullYear(), currentMonth); + const lastTuesdayLastMonth = getLastTuesdayOfMonth(today.getUTCFullYear(), currentMonth); + + let shouldSendReminder = false; + + if (isFriday) { + if(isLastFriday && today > lastTuesdayLastMonth){ + shouldSendReminder = true; + const firstTuesdayNextMonth = getFirstTuesdayOfMonth(today.getUTCFullYear(), currentMonth + 1); + date = firstTuesdayNextMonth.toISOString().split('T')[0]; + } else if (isFirstFriday && today < firstTuesdayThisMonth) { + shouldSendReminder = true; + date = firstTuesdayThisMonth.toISOString().split('T')[0]; + } + } else if (isTuesday) { + shouldSendReminder = true; + date = "today"; + } + + if (!shouldSendReminder) { + console.log("Not the correct day for sending a reminder"); + return; + } + + console.log(`Calculated date for reminder: ${date}`); + + // Fetch the latest open Office Hours issue + const targetLabel = encodeURIComponent(process.env.OCWM_LABEL); + const { data: workMeetings } = await github.request(`GET /repos/${process.env.OWNER}/${process.env.REPO}/issues?labels=${targetLabel}&per_page=1&state=open`); + + if (workMeetings.length === 0) { + console.log("No open Office Hours issue found"); + return; + } + + const issueNumber = workMeetings[0].number; + const issueLink = `https://github.com/${process.env.OWNER}/${process.env.REPO}/issues/${issueNumber}`; + + console.log(`Found issue: ${issueLink}`); + + // Prepare the message for Slack + const message = { + issue: issueLink, + date: date, + timezone: timezone, + time: time + }; + + console.log(`Sending message to Slack: ${JSON.stringify(message)}`); + + // Send the message to Slack + const response = await fetch(process.env.SLACK_WEBHOOK, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(message) + }); + + if (!response.ok) { + throw new Error(`Failed to send Slack message: ${response.statusText}`); + } + + console.log(`Reminder sent for ${timezone} session on ${date}`); + } catch (error) { + console.error(`An error occurred: ${error.message}`); + core.setFailed(error.message); + } \ No newline at end of file diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 00000000..2da10321 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,68 @@ +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '0 0 * * 0' # Runs every Sunday at midnight + +permissions: + issues: write + pull-requests: write + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v8 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # Message to comment on stale issues. + stale-issue-message: | + Hello! :wave: + + This issue has been automatically marked as stale due to inactivity :sleeping: + + It will be closed in 180 days if no further activity occurs. To keep it active, please add a comment with more details. + + There can be many reasons why a specific issue has no activity. The most probable cause is a lack of time, not a lack of interest. + + Let us figure out together how to push this issue forward. Connect with us through our slack channel : https://json-schema.org/slack + + Thank you for your patience :heart: + + # Message to comment on stale pull requests. + stale-pr-message: | + Hello! :wave: + + This pull request has been automatically marked as stale due to inactivity :sleeping: + + It will be closed in 180 days if no further activity occurs. To keep it active, please add a comment with more details. + + There can be many reasons why a specific pull request has no activity. The most probable cause is a lack of time, not a lack of interest. + + Let us figure out together how to push this pull request forward. Connect with us through our slack channel : https://json-schema.org/slack + + Thank you for your patience :heart: + + # Message to comment on issues that are about to be closed. + close-issue-message: 'This issue did not get any activity in the past 180 days and thus has been closed. Please check if the main branch has fixed it. Please, create a new issue if the issue is not fixed.' + + # Message to comment on pull requests that are about to be closed. + close-pr-message: 'This pull request did not get any activity in the past 180 days and thus has been closed.' + + # Labels to add to stale issues and pull requests. + stale-issue-label: 'Status: Stale' + stale-pr-label: 'Status: Stale' + + # Number of days of inactivity before an issue/PR is marked as stale. + days-before-stale: 180 + + # Number of days of inactivity before an issue/PR is closed. + days-before-close: 180 + + # Remove the stale label when the issue/PR is updated. + remove-stale-when-updated: true + + # Exempt labels to ignore when checking for stale issues/PRs. + exempt-pr-labels: 'Status: On Hold,Status: Blocked,Status: Do not close' + exempt-issue-labels: 'Status: On Hold,Status: Blocked,Status: Do not close' diff --git a/ADOPTERS.md b/ADOPTERS.md index b5cdfbd4..38dbdb39 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -1,28 +1,28 @@ # Adopters -**πŸ“’ If you're using JSON Schema in your organization, please add your company name to this list.** +🚨 **Update - June 2024** 🚨 +--- +We are so excited to share that we launched the [JSON Schema Landscape](https://landscape.json-schema.org/) as the visual representation of the JSON Schema Ecosystem. With this new and exciting initiative we have a duplicity between this Adopters list and [the Adopters group in Landscape](https://landscape.json-schema.org/?group=adopters), therefore we have decided to manage the adopters list directly in the landscape (See the landscape guide [here](https://landscape.json-schema.org/guide#introduction--adopters)). + +**πŸ“’ If you're using JSON Schema in your organization, please add your company to the adopters list.** **πŸ™ It really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact.** -## Why add your company name? +## Why add your company? - Demonstrates the real-world usage of JSON Schema. - Provides visibility to organizations that have successfully adopted JSON Schema. - Encourages other organizations to adopt JSON Schema. - Builds trust in the JSON Schema ecosystem. -This document also lists the organizations that use JSON Schema based on public information available in blog posts, events, and videos. If any organization would like to be added or get removed please make a Pull Request. +If any organization would like to be added or get removed please make a Pull Request. ## How to add your company -You can add your Company by using the [Adopter form](https://forms.gle/vyFskw1RshJ55LY46) or by editing this file after following the [CONTRIBUTING.md](./CONTRIBUTING.md). - -Guidelines: -- Please don't include your organization's logo or other trademarked material -- Add a reference (link to a public blog post, video, slides, etc) mentioning that JSON Schema is used -- Please include a contact link for maintainers +You can add your Company by using the [Adopter form](https://forms.gle/HNZs4vt49GWPPGQq5) or by submitting a PR editting the [landscape.yml](https://github.com/json-schema-org/landscape/blob/main/landscape.yml) file in the [landscape repository](https://github.com/json-schema-org/landscape/). For more information please check the [contributing guidelines](https://github.com/json-schema-org/landscape/blob/main/CONTRIBUTING.md#adding-a-new-organization-) of the Landscape project. Looking for extra credit? We also do [case studies](https://github.com/orgs/json-schema-org/projects/8/views/2) and accept sponsorship via [Open Collective](https://opencollective.com/json-schema). +
Find out more about case studies If your company would like to share more about what you're doing in public, there's a good chance we'd love to collaborate on a case study. @@ -31,23 +31,9 @@ Please reach out to us via [our Slack](https://json-schema.org/slack) or creatin From exerience, these case studies can take some time to develop, write, get approved, and published. It's best if you can find out for sure if you can publish a case study with us as early as possible. If you're at a big organization, you'll likely have to get approval from people who have no idea what you're talking about. Here's some context you can share with them. -JSON Schema is an [OpenJS Foundation](https://openjsf.org/about) Project, under [The Linux Foundation](https://www.linuxfoundation.org/). Both the OpenJS Foundation and The Linux Foundation are registered non-profit organizations (501(c)(6)). - By supporting JSON Schema with a case study, you are documenting its success and your smarts in picking it as a solution. JSON Schema case studies help justify the ongoing financial support required to mature, develop, and support the JSON Schema ecosystem. Case studies also demonstrate the strength of the JSON Schema ecosystem in production today. The next case study could be you.
-| Organization | Contact | Description of Use / Reference | -| --- | --- | --- | -| [GitHub](https://github.com/) | [Rachael Sewell](https://www.linkedin.com/in/rachaelsewell/)
[Robert Sese](https://www.linkedin.com/in/rsese/) | [Github JSON Schema case study](https://json-schema.org/blog/posts/github-case-study) | -| [Cookpad](https://cookpad.com/) | [Kenshi Shiode](https://www.linkedin.com/in/kenshi-shiode-b65922212/) | [Cookpad JSON Schema case study](https://json-schema.org/blog/posts/cookpad-case-study-en) | -| [Tyler Technology](https://www.tylertech.com/) | [Andres Moreno](https://www.linkedin.com/in/andmoredev/) | [Tyler Technology JSON Schema case study](https://json-schema.org/blog/posts/tyler-technologies-case-study) | -| [W3C Web of Things](https://www.w3.org/WoT/) | [Ege Korkan](https://www.linkedin.com/in/ege-korkan/) | [W3C Web of Things JSON Schema case study](https://json-schema.org/blog/posts/w3c-wot-case-study) | -| [Remote](https://remote.com/) | [Sandrina Pereira](https://www.linkedin.com/in/sandrina-p/) | [Remote JSON Schema case study](https://json-schema.org/blog/posts/remote-case-study) | -| [Postman](https://www.postman.com/) | [Juan Cruz Viotti](https://www.linkedin.com/in/jviotti/) | [Postman JSON Schema case study](https://json-schema.org/blog/posts/postman-case-study) | -| [OpenMetadata](https://open-metadata.org/) | [Suresh Srinivas](https://www.linkedin.com/in/sureshsri/) | [OpenMetadata - JSON Schema in production episode](https://youtu.be/ZrVTZwmTR3k) | -| [Wundergraph](https://wundergraph.com/) | [Jens Neuse](https://www.linkedin.com/in/jens-neuse-706673195/) | [Wundergraph - JSON Schema in production episode](https://youtu.be/_TCU6da0GA8) | -| [Zapier](https://zapier.com/) | [David Brownman](https://www.linkedin.com/in/xavdid/) | [Zapier - JSON Schema in production episode](https://youtu.be/yDL98sd4KVE) | -| [Microsoft](https://www.microsoft.com/) | [Mads Kristensen](https://www.linkedin.com/in/madskvistkristensen/) | [Microsoft - JSON Schema in production episode](https://youtu.be/-yYTxLZZk58) | -| [F5](https://www.f5.com/) | [Kin Lane](https://www.linkedin.com/in/kinlane/) | [F5 - JSON Schema in production episode](https://youtu.be/pibZF049zqE) | -| Zones | [Chuck Reeves](https://www.linkedin.com/in/charles-reeves-156953284/) | [Zones - JSON Schema in production episode](https://youtu.be/fkziMQD7pqQ) | -| [Automatic Data Processing (ADP)](https://www.adp.com/) | [Jeremy Fiel](mailto:jeremy.fiel@adp.com?subject=I%20love%20JSON%20Schema%20too!) | [ADP Developer Resources](https://developers.adp.com/welcome) | +### The JSON Schema Adopters list + +Please visit the JSON Schema Landscape to see the full list: https://landscape.json-schema.org/ diff --git a/COMMUNITY-MANAGER.md b/COMMUNITY-MANAGER.md new file mode 100644 index 00000000..8a927b6d --- /dev/null +++ b/COMMUNITY-MANAGER.md @@ -0,0 +1,78 @@ +# Community Manager Role + +Community managers are responsible for managing many aspects of the JSON Schema community. The goal is to achieve and maintain a healthy and growing JSON Schema community where everyone feels welcome and is encouraged to share knowledge and learn from each other. This document outlines the responsibilities of a community manager and the process involved in becoming one. + +### Requirements + +* Proven track record of contributions and active engagement in the JSON Schema Community. +* Being an example of Open Source citizenship. + +### Responsibilities + +A community manager has the following responsibilities: + +* Manage the JSON Schema Open Community Working Meetings: + * Host the call. + * Publish the community call recording to the YouTube channel. +* Manage the Slack community: + * Organize and monitor Slack channels. + * Ensure community rules are being followed. + * Help new Slack users find the right channels & answers. + * Announce JSON Schema updates and events. +* Review issues & pull requests in the community repository. +* Review and publish JSON Schema blog posts submitted by the community. +* Report on community health, growth trends, and top issues to maintainers and STC. +* Propose new partnerships with other adjacent communities to STC and manage them. +* Manage community analytics tools, including Plausible and CommonRoom.io. +* Manage the social media accounts: [@jsonschema](https://twitter.com/jsonschema) Twitter and [@jsonschema](https://twitter.com/jsonschema) and [@jsonschema](https://www.linkedin.com/company/jsonschema) Linkedin: + * Asking the community for community call topics. + * Announcing community calls (one day before and one hour before the call). + * Announcing that the recording of the community call is available on YouTube. + * Announcing JSON Schema updates like tooling or adopters. + * Announcing new JSON Schema blog posts. + * Reposting relevant tweets from the community. +* Manage the [@JSONSchemaOrgOfficial](https://www.youtube.com/@JSONSchemaOrgOfficial) YouTube account. +* Launch and manage Community programs. + +### Duties that require STC approval + +* Add new analytics tools + +## Process to become a community manager + +Self-nominate via a [new issue in the community repository](https://github.com/json-schema-org/community/issues/new) using the label `Programs` and stating why you want to be an community manager, or alternatively, contact an TSC member. A community manager needs approval from TSC using the [standard voting process](https://github.com/json-schema-org/community/blob/main/GOVERNANCE.md#decision-making-via-vote). + +Once a community manager is approved, they will be added to the Community Managers list. It is important to notice that Community Managers does not have TSC voting rights. + +## Limits and Expiration + +The community manager role expires 12 months from the date it was approved. Reapproval is then required. To minimize the number of people to coordinate between, there is a maximum of three active community managers. + +## Removal + +The community manager role is removed in the following cases: +* Expiration of the 12-month term. +* STC votes to remove the community manager. +* The community manager can ask to have themselves removed from the role. + +## Current community managers +The following community managers have been approved by the TSC: + +| Name | GitHub Handle | Slack Handle | Company | Status | Timezone | Term Start | Term End | +| - | - | - | - | - | - | - | - +| Onyedikachi (Hope) Amaechi-Okorie| [@Honyii](https://github.com/Honyii) | @onyedikachi hope | JSON Schema | Active | UTC+2/CET | June 15th, 2025 | TBD +| Benjamin Granados | [@benjagm](https://github.com/benjagm)| benjamin.granadosm | Celonis | Inactive | UTC+2/CET | Dec 1st, 2023 | June 15th, 2025 + + + +### Statuses + * Active: Currently an active community manager. + * Inactive: Previously held a community manager role. + +### Know more + +Please join the `#community-mgmt` slack channel using this [link](#community-mgmt) if you like to know more. + +### Atribution + +This document has been inspared by the [DAPR Community Manager document](https://github.com/dapr/community/blob/master/COMMUNITY-MANAGER.md). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a583438a..d0bc7310 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,18 +1,46 @@ -# Guidelines for contributing to the JSON Schema project GitHub organisation - -🚨 Work in progress! (2021/07 - @relequestual) +# Guidelines for contributing to the JSON Schema Community We invite you to join us working on JSON Schema. -The fastest way to get involved and become active in the community is to join our Slack server at https://json-schema.org/slack. +The fastest way to get involved and become active in the community is to join the `#contribute` channel in our Slack server at https://json-schema.org/slack. If you have suggestions on how to improve our community, please do check out our [Community Discussions](https://github.com/json-schema-org/community/discussions), and start a new discussion. -# General - -While each repository may have its own guidance for contributing, the following sections apply organisation wide. - -## Key "Architectural" decisions +### Types of contributions + +JSON Schema is a community that lives on its contributors. As we grow, we need more people to help others. You can contribute in many ways, either in the specification development or in the wider ecosystem. + +Here are some areas where you can contribute: + * 🌱 [Specification development](https://github.com/json-schema-org/json-schema-spec) + * 🐞 Reporting Bugs + * πŸ’‘ Issues and feature requests + * 🧐 Reviewing PRs + * ❓ Answer questions + * πŸ™ Join discussions and provide feedback + * πŸ› οΈ [Add new JSON Schema tooling](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md#%EF%B8%8F-add-a-new-implementation) + * πŸš€ [Adding a new Adopter](https://github.com/json-schema-org/community/blob/main/ADOPTERS.md) + * ✍️ [Publish a blog post](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md#%EF%B8%8F-publish-a-blog-post) + * πŸ“ˆ [Publish a case study](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md#-publish-a-case-study) + * πŸ“‹ [Improving The Documentation](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md#-improving-the-documentation) + * πŸ— [Website development](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md#-improving-the-website) + * 🎨 [Improving The Design](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md#-improving-the-design) + * 😍 [Collaborating with Community Management tasks](https://github.com/json-schema-org/community) + * πŸš€ [Adding a new Adopter](https://github.com/json-schema-org/community/blob/main/ADOPTERS.md) + * 🌈 Other JSON Schema projects you can contribute to: + * [JSON Schema Conference](https://github.com/json-schema-org/conference/blob/main/CONTRIBUTING.md). + * [Tour of JSON Schema](https://github.com/json-schema-org/tour/blob/main/CONTRIBUTING.md). + * [JSON Schema Landscape](https://github.com/json-schema-org/landscape/blob/main/CONTRIBUTING.md). + * [JSON Schema Ecosystem](https://github.com/json-schema-org/ecosystem/blob/main/CONTRIBUTING.md). + + * 🌐 Other JSON Schema Ecosystem Projects you can contribute to: + * [Bowtie](https://github.com/bowtie-json-schema/bowtie) development. + * Contribute to any well mantained JSON Schema implementation. + +#### Community management tasks + +To get involved in the Community management tasks, please join the [`#community-mgmt` slack channel](https://json-schema.slack.com/archives/C0209BTU2UQ). + +### Key "Architectural" decisions In most repositories, we would like to utilise [Architectural Decision Records (ADRs)](https://adr.github.io/) to help us work effectively. @@ -45,6 +73,10 @@ Once an ADR is part of a pull request which is labelled with `adr-required`, the The process is designed to be lightweight, and a template is provided for ease of use. +### Triage + +Please check the [triage process](https://github.com/json-schema-org/.github/blob/main/TRIAGE.md) to learn how we review and label incoming issues . + ### Feedback Feedback on this process can be made informally through our [Slack server](https://json-schema.org/slack) and formally using our [Community Discussions](https://github.com/json-schema-org/community/discussions). diff --git a/GOVERNANCE.md b/GOVERNANCE.md new file mode 100644 index 00000000..f2160b0f --- /dev/null +++ b/GOVERNANCE.md @@ -0,0 +1,168 @@ +# 🚨 This document is not ratified 🚨 + +In the process of creating a charter, many "process" and governance related things were included in the draft of the charter. Feedback was that the charter should not include such content, and that it should be moved to a separate file. This is that file. +The initial commit includes content already approved by the group, however some additional content will be added at a later point, and this comment removed. +For context, see https://github.com/json-schema-org/community/pull/325 + +--- + +# Governance + + +## JSON Schema Governing Body (TSC) +It is in some cases considered difficult or even unhelpful for the project to limit the number or percentage of TSC members by employer (especially when an employer has employed individuals already active in the community to work exclusively on the open source project). While at this time there are no limits on TSC membership by employer, as soon as the TSC reach 10 members a rule will be enabled to set the limit to at least less than 50%, ideally 33% (One third, one in three). + +TSC members are expected to regularly participate in TSC activities. + +When the TSC meets using virtual conferencing tools, the meeting will be directed by the TSC Chairperson(s). Responsibility for directing individual meetings may be delegated by a TSC Chairperson to any other TSC member. Minutes or an appropriate recording will be taken and made available to the community through accessible public postings. + +TSC meetings should have a clearly defined agenda. + +At any point, any TSC member may notify the TSC that they are taking a period of leave and should be considered to abstain from any signaling or voting. The TSC member must detail when they expect to return. + +The TSC may, at its discretion, invite any number of non-voting observers to participate in the public portion of TSC discussions and meetings. + +A TSC member may be removed by vote from the TSC if, during a 3-month period, all of the following are true: + +- They do not participate in any TSC related discussions or votes +- They do not provide any form of excuse or no excuse is known for their absence + +There may be other grounds for removal from the TSC, such as seriously violating the Code of Conduct. + +## Decision Making + +The JSON Schema Project uses 2 different mechanism for decision making: + +1. **Consensus**: The JSON Schema Project tries by default to find consensus in all the strategic decision by using the consensus mechanism described below. + +2. **Voting**: It is OK use the voting process for those cases when the discussion has already occurred or discussion and discovery is not required. Voting is a simple yet powerful mechanism. + +### Decision-making via consensus + +Both the Quick and Standard consensus process require the creation of an Issue in the TSC GitHub repository. +The Issue must: +- Include brief introductory information about the decision that needs to be made +- Be labeled with `tsc-decision` +- Use the provided template, unless there is a good reason not to do so + +#### Quick consensus process + +In the event a TSC member feels the need for a decision to be expedited, they may create the decision discussion, indicating that they wish to use the quick process rather than the standard consensus process. This should be done by creating a new Issue in the TSC repository. +In addition to the requirements above, the Issue must be labeled `expedited`. + +While an associated Discussion is not required, if one is used, it must be clearly linked in both directions, and be labeled with `tsc-decision`. + +A vote is called to see if other members agree. The vote takes place on the opening comment. This vote is different from the decision-making voting process, and only requires 3 (additional) votes in favour and none against to carry. If the vote carries, the quick process is started, otherwise the standard consensus process is started. + +The quick process is designed for small trivial issues where the resolution feels likely obvious, and the member who proposes the decision discussion has at least one clear resolution to present. The decision discussion owner should present the possible solution they are advocating for (in a follow up comment on the Issue. Not in the opening comment.), and ask to test for agreement. If consensus is not clearly reached, the quick process is ended and the standard consensus process is started. (Label `expedited` should be removed and `tsc-stage-1` added.) + +#### Standard consensus process + +The standard consensus process is designed for all non-trivial decisions. + +A decision discussion may be started by creating an Issue and Discussion in the TSC repository. + +In addition to the requirements above, the Issue must: +- Be labeled with `tsc-stage-1` +- Link to the associated initial Discussion + +The Discussion must: +- Link to the associated Issue +- Include detailed introductory information about the decision that needs to be made +- Be labeled with `tsc-decision` + +The standard consensus process should progress through the following seven stages. + +1. Introduction and clarify the issue +2. Open the discussion - Share needs and perspectives on the issue +3. Explore ideas in a broad discussion +4. Form a proposal +5. Amend the proposal +6. Test for agreement +7. Determine resolution + +(These stages are those defined by the [Seeds For Change's Consensus Decision Making document](https://seedsforchange.org.uk/consensus). Please use that document as a rough guide for specific steps while the JSON Schema project tests and firms up our specific requirements, and document them in our yet to be created [Governance document](./GOVERNANCE.md)) + +All decisions that go through the standard consensus process must have an associated GitHub Issue, which allows those unable to attend meetings to participate. +The opening comment of the Issue should be kept up to date as to the status of the decision. + +Transition between stages may be requested by anyone, but must be called by the facilitator (either a TSC chair or TSC member delegated the facilitator role for a given decision discussion). The stage will be indicated in the opening comment of the Issue and using the appropriate label. + +Stages 1 and 6 are required to be open for at least 7 days or until every TSC member has confirmed they wish to progress to the next stage (Progression will still be "called", as above). This includes signals of abstaining given automatically via a notification of period of leave from TSC activity. For stage 2, any TSC member may request a 7 day extension to allow for further consideration. Should there be no reasonable objection (determined by a TSC Chair), the minimum time will be extended by 7 days. A TSC member may request multiple extensions, however lack of justification may result in the TSC member being asked to consider abstaining instead. There are no other explicit time limits placed on the other stages of the process. + +Most of the discussion should happen within the associated Discussion. The Issue should mostly be used to update and report the progress of the consensus process. Groups looking to form a proposal or amend a proposal (stages 4 and 5) may make use of other additional Discussions or Issues, but these must be clearly linked. The opening comment should be updated to include links to relevant specific threads and comments in associated Discussion, and any other relevant locations. + +Moving to the "Form a Proposal" stage should be approached when the group might feel able to combine ideas to form a single proposal. Multiple possible solutions should be discussed in the previous stage. + +The "Test for Agreement" step is not voting, and is instead asking for "signals", which enable the consensus process to continue. +Voting should be considered a last resort if the consensus process has failed for a particular issue, to enable the project to move forward. + +If someone calls for a Test for Agreement, the facilitator for the decision discussion will review the current proposal and may call to Test for Agreement. The facilitator will post a comment on the Issue (using the provided template), linking to the current version of the proposal, and update the opening comment with a link to the new comment. TSC members will then be asked to signal their agreement using GitHub Reactions on the comment. + +The signals include "Block". Any use of the "Block" signal will require a new or amended proposal to be worked on. A "Block" should be used to indicate a strong objection, such as something against the project's core principles or something that would harm the project. + +The blocker/s should be prepared to commit to trying to find a solution, but not necessarily form and present a solution by themselves. The TSC will look to facilitate a number of workshops to help understand the blocking objections, and form a new or amended proposal as a result. If the blocker/s are unable or unwilling to participate in attempts to find a solution, after multiple attempts, the original proposal is moved to a vote, as defined in this document, but additionally requiring a 75% super majority to pass. This will be at the discretion of the TSC Chairs. + +If someone feels a "Block" is being used for unfair reasons, such as targeting individuals or to gain some personal advantage, or any such reason that might be in breach of our Code of Conduct, they should immediately report it to the Code of Conduct committee. The Code of Conduct committee should report this to the TSC Chairs as soon as possible, and the decision is halted while the committee investigates the report. + +The Code of Conduct committee will report their findings and any remediation action to the TSC Chairs. +Reports must remain anonymous, as per the Code of Conduct. + +The other signals that may be made when a Test For Agreement is called include "Reservations" and "Stand Aside". Both are signals which convey consent to let the proposal pass, however they may be conditional. + +Signaling "Reservations" means an agreement on the overall direction, however there is some desire to revise or amend the proposal somewhat. It is expected that the individuals signaling "Reservations" want to engage in reworking the proposal. The facilitator will check with each individual regarding the strength of the reservation, and later facilitate or direct discussion as required to amend and represent the proposal. If the individual/s do not wish to participate in reworking the proposal, their reservations should be logged as part of the decision record as unresolved. + +If "Reservations" is signalled three consecutive times by the same individual/s, anyone may call for no further attempts to remediate the reservations, and the proposal will pass. + +Signaling "Stand Aside" conveys consent, but an unwillingness for whatever reason to be further involved. It could be for example that the individual does not have time to participate, or that they have limited opinions on the specific decision. The individual may provide a reason for standing aside. If the individual believes the reason can be remedied by the group, the group should seek to remedy the reason where possible, with help from the facilitator. + +The TSC will make every reasonable effort to reach unanimity based consensus. If unanimity seems unlikely after several failed attempts to revise the proposal and Test for Agreement, if the proposal is clear, the decision may be moved to a vote, at the discretion of the TSC Chairs. This is a last resort. + +The "Determine resolution" step should result in the creation of an [Any Decision Record](./docs/adr/README.md). More details in following sections. + +### Decision-making via vote + +Any call for public TSC votes will be made by creating an Issue in the TSC repository with the `tsc-vote` label assigned. The Issue should use the provided template. + +Once an Issue gains the label `tsc-vote`, all members of the TSC will be notified via a specific Slack channel (and by any additional method the TSC deems helpful). The votes will be collected by way of using GitHub Reactions on a specific comment, which must not be the first comment. The first comment must link to the voting comment in the same Issue. +Voting will by default close after 7 days. Any member of the TSC may request a 7 day extension for any reason, moving the closing date back by 7 days. Any member of the TSC may request additional extensions, approved at the discretion of any TSC chair. + +For a vote to carry, a quorum of 75% is required by default. + +If a TSC member wants to call for a vote that they wish to be private, they must do so by contacting the TSC Chairs directly. +At the discretion of the TSC Chairs, a vote may be made private, and will then be handled by creating an Issue in the `TSC-private` repository. + +The topic and nature of private votes may remain private, including the results. (It is expected that vast majority of votes will be public. Private voting should only be used in exceptional circumstances.) + +The kinds of votes which should be private include things related to security reports or discussions with an entity where it might not be desireable to be made public knowledge to either party. This could include details of case studies or partnerships which are not yet concluded or published, where either party may need a final approval for publication or wishes for coordinated or scheduled public publication. + +(You can view the "Decision-making via vote" process as a runnable interactive Finite State Machine in the [governance supporting information document](./docs/governance/supporting-info.md).) + +### Documenting decisions + +Either initially, or at any point during the process, any TSC member may suggest the issue being discussed is "significant or noteworthy." If there are no objections, the resolution actions for the issue must include the creation of an Any Decision Record (previously named Architectural Decision Record). The Any Decision Record (ADR) should include as much information as is thought to be useful, following the provided template. The Pull Request for the ADR must be approved by all those who were involved in the decision making process, which must also be documented in the ADR as the "deciders." + +(The quick consensus process does not require an Any Decision Record, but the decision should be minuted.) + +Private decisions should be documented (as an ADR or otherwise) in the private `TSC-private` repository. + + +## Other Project Roles + +The JSON Schema project recognizes the need for both technical and non-technical roles. While the JSON Schema project has no legal entity nor is housed within an entity which can take on business responsibilities, the TSC shall take on those responsibilities as much is as feasible. There are other non-technical responsibilities + +The TSC will look to create other roles as appropriate, and may update this document in accordance with the requirements for doing so, to formally recognize the additional roles. + +The following responsibilities are recognized as those requiring roles to be defined by the TSC: +- Community and Industry connections +- Brand awareness, recognition, and health +- Education and training + +--- + +This work is a derivative of the [WebdriverIO Project Governance Model](https://github.com/webdriverio/webdriverio/blob/main/GOVERNANCE.md). + +Inspired by https://seedsforchange.org.uk/consensus, https://seedsforchange.org.uk/quickconsensus +Informed by https://www.ic.org/busting-the-myth-that-consensus-with-unanimity-is-good-for-communities/ + +This work is licensed under a [Creative Commons Attribution-ShareAlike 2.0 UK: England & Wales License](https://creativecommons.org/licenses/by-sa/2.0/uk/). diff --git a/INFRASTRUCTURE.md b/INFRASTRUCTURE.md index 4cd790a3..4c0d8128 100644 --- a/INFRASTRUCTURE.md +++ b/INFRASTRUCTURE.md @@ -2,35 +2,31 @@ First, let's address some details of this document. -
- What, why, who... +## What? - ## What? +This document outlines the various systems that JSON Schema the organisation uses and maintains. +This does not include social media profiles. - This document outlines the various systems that JSON Schema the organisation uses and maintains. - This does not include social media profiles. +## Why? - ## Why? +Originally as part of onboarding to the OpenJS Foundation, but now because we recognise it is open, transparant, and helpful. +It's also probably good practice. - It's part of the required tasks to be completed by the OpenJS Foundation, forming an item of the [onboarding checklist](https://github.com/openjs-foundation/cross-project-council/blob/main/PROJECT_PROGRESSION.md#onboarding-checklist). - It's also probably good practice. +This enables members of the JSON Schema team to have oversight and management of such infrastructure should it be required. - This enables members of the JSON Schema team, and the OpenJS Foundation, to have oversight and management of such infrastructure should it be required. +## Who? - ## Who? - - This was mainly a list created by Ben Hutton (@relequestual). - Others are free to amend and update this (via Pull Requests) as is required. - -
+This was mainly a list created by Ben Hutton (@relequestual). +Others are free to amend and update this (via Pull Requests) as is required. +## Code and Communication JSON Schema mostly operates on GitHub and Slack. -Our GitHub organisation is located at https://github.com/orgs/json-schema-org. - -Our Slack server is located at https://json-schema.slack.com. +* Our GitHub organisation is located at https://github.com/orgs/json-schema-org. +* Our Slack server is located at https://json-schema.slack.com. (Anyone can join using https://json-schema.org/slack.) +## Domain and hosting The JSON Schema organisation maintains ONE domain name: json-schema.org. The domain name is registered and paid for by the OpenJS Foundation. @@ -38,44 +34,58 @@ The domain name is registered and paid for by the OpenJS Foundation. The domain name defers its name servers to CloudFlare. The DNS mostly points to GitHub. +## Website The website is split into several applications for historical reasons. -The main website is run through GitHub Pages. The source code is located at https://github.com/json-schema-org/json-schema-org.github.io. +The main website is run through Cloudflare Pages. The source code is located at https://github.com/json-schema-org/website. + A key set of resources hosted by the site are the JSON Schema meta-schemas, which are used to indicate which schemas are themselves valid for each version of the specification. These resources are potentially heavily used or referred to by consumers of JSON Schema. Links to these resources can be found at https://json-schema.org/specification.html for the latest version of JSON Schema, and at https://json-schema.org/specification-links.html for older versions. The working location for these resources is in the specification repository at https://github.com/json-schema-org/json-schema-spec/, and they are then included into the aforementioned website repository for publishing using `git submodule`. -The human friendly documentation for the specification, dubbed "Understanding JSON Schema", is located at https://json-schema.org/understanding-json-schema. -The source for this project is located at https://github.com/json-schema-org/understanding-json-schema. +We are capturing feedback in the website using a cloudflare worker to receive the data and send it to an Airtable database. The Airtable account is owned and paid for by Postman. -Both of these sites are deployed by GitHub onto GitHub Pages. - -The JSON Schema blog is located at https://json-schema.org/blog. -The source code is located at https://github.com/json-schema-org/blog. -The blog is deployed on CloudFlare Pages. -The CloudFlare pages name is `json-schema-blog`. -The blog URL is redirected using CloudFlare workers. -The redirection worker is called `blogredirect`. -(It may now be possible to do the redirect using URL rewriting, but it was broken at the time, and their community support suggested using Workers.) - -The main site and the understanding site get deploy previews via Netlify. -Unfortunately, CloudFlare pages does not offer deployment previews on Pull Requests where the Pull Request comes from a fork of the project (while netlify does, and for free). +## The JSON Schema Calendar +We are using a Google Calendar to share with the Community all the events. This Calendar has been created with a Google Account associated with the emails info@json-schema.org. +## Bots The Slack server has a number of bots which feed data into specific channels. -The bot which feeds tweets containing JSON Schema from Twitter to the #twitter-mentions channel was created by [Mike Ralphson](https://twitter.com/PermittedSoc). We have no access to it, and it currently (as of 2022-05-26) needs to be replaced as it's acting up. +* The bot which feeds tweets containing JSON Schema from Twitter to the #twitter-mentions is now inactive after the changes in the Twitter API. The bot was created by [Mike Ralphson](https://twitter.com/PermittedSoc). We have no access to it. -The bot for #stack-overflow runs from If This Then That under @relequestual 's account. It should probably be migrated to Zapier. +* The bot for #stack-overflow runs from If This Then That under @relequestual 's account. It should probably be migrated to Zapier. -The bot for #reddit-mentions runs from Zapier under @benjagm 's account. +* The bot for #reddit-mentions runs from Zapier under @benjagm 's account. -The #github channel bot uses the official Github Slack app, and runs all Github events from all of our repositories, apart from GitHub Discussions. +* The #github channel bot uses the official Github Slack app, and runs all Github events from all of our repositories, apart from GitHub Discussions. -The #ghd-community channel bot uses Zapier to process webhooks for our Community repo's GitHub Discussions, and relay to Slack. +* The #ghd-community channel bot uses Zapier to process webhooks for our Community repo's GitHub Discussions, and relay to Slack. The Zapier account is owned and paid for by Postman. If this ever might become a problem, we should move to our own licence. At the time, there was no official app integration. +* The bot for notifying new youtube videos in the #announcements channel in Slack uses Zapier. + +* The notifications with website users feedback uses Airtable automations. + +## Metrics + +The website metrics are available in Google Analytics. For a time they were in Plausible. + +For the Community metrics we are using Common Room. + +## Email + +We are using Google Workspace to manage the email accounts associated to json-schema.org. + If you believe something is missing from this documentation, [please file an issue](https://github.com/json-schema-org/community/issues/new?assignees=&labels=&template=action_item.md). + +## Billing + +Some parts of the above require billing. For now this is only Google Workspace. +Previously we had access to virtual cards through Open Collective, but that program has shuttered. +We have no legal entity by which we can create bank accounts. +Currently billing is done by Ben Hutton and claimed through our Open Collective. +If asked for an address, we should use that defined by the Open Source Collective. diff --git a/README.md b/README.md index 7e7d9196..6d46ae43 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,103 @@ -# JSON Schema Community +[![JSON Schema logo - Build more, break less, empower others.](https://raw.githubusercontent.com/json-schema-org/.github/main/assets/json-schema-banner.png)](https://json-schema.org) + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + +

-[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md) -[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) -[![Financial Contributors on Open Collective](https://opencollective.com/json-schema/all/badge.svg?label=financial+contributors)](https://opencollective.com/json-schema) +# JSON Schema Community -[![part of ADR](https://img.shields.io/badge/part_of-ADR-blue)](https://adr.github.io) -![GitHub Discussions](https://img.shields.io/github/discussions/json-schema-org/community) +Welcome to the JSON Schema community! You've arrived at the perfect place to begin your journey as a contributor. Whether it's assisting with documentation, writing a blog post, enhancing the website, delivering presentations, or any other form of contribution, there's plenty of opportunities to get involved in the project. We are a friendly, collaborative group and look forward to working together. -# What is this repo? +- πŸ‘‹ [Introduction](#introduction) +- πŸ’¬ [Discussions and slack](#discussions-and-slack) +- πŸ—“ [Community meetings](#community-meetings) +- 🌱 [Getting involved](#getting-involved) +## Introduction This repo is a place to discuss and debate various aspects of running the JSON Schema organisation, how we work as a community, and our expectations. -The discussions will primarily take place using [Github Discussions](https://github.com/json-schema-org/community/discussions) for this repo. +### Discussions and Slack + +Reach out with any questions you may have and we'll make sure to answer them as soon as possible and as a community member feel free to jump in and answer questions. + +JSON Schema utilizes Slack and GitHub Discussions to facilitate our communications, each serving unique purposes to support our community effectively. + +Slack is the go-to for lively conversations, channel announcements, one-on-one support, and immediate assistance, making real-time communication seamless and efficient. However, Slack isn't ideal for housing detailed discussions, long-term planning, or tracking the evolution of ideas and decisions. + +For more in-depth discussions, planning, and documenting significant decisions, we use GitHub Discussions. It allows us to work together on significant decisions more effectively and provides long standing point of reference for our discussions. + +| Platforms | Link | +|:----------|:-------------| +| πŸ’¬ Slack (preferred) | https://json-schema.org/slack +| πŸ’¬ Discussions | https://github.com/orgs/json-schema-org/discussions + +### Community meetings +We hold monthly Office Hours and weekly Open Community Working Meetings. Office Hours are every first Tuesday of the month, and by appointment. Open Community Working Meetings are every Monday at 14:00 PT. -Initially Github issues will be disabled as we evaluate how we should use them in this repo (through Discussions). +**Office Hours (Monthly):** -Once we have some links for the community, this readme will link to various locations, resources, and documents that are useful for the community. +**Office Hours** provide time for the community for questions, discussions, comments, or just to chat about JSON Schema. -# Who can use this repo? +We host two different alternate sessions: -Anyone who wants to learn about, be part of, or help improve the JSON Schema community is welcome here. + - APAC/Americas friendly every 2 months - First Tuesday at 15:00 PT + - Europe/Americas friendly every 2 months - First Tuesday at 15:00 BST -Anyone can start a discussion in any category. You can even start a discussion to suggest adding a new category! +More details [here](https://github.com/orgs/json-schema-org/discussions/34/). -# Why do we need this repo to have discussions? +**Open Community Working Meeting (Monthly every 3rd Monday):** -Slack is really great for chatting, working through tricky problems, having one-to-one support sessions. +**Open Community Working Meetings** are a 1 hour, agenda'd only, with a focus on furthering the JSON Schema specification and organization. -Slack is not so great for long running ideas, plans, or discussions, a point of reference for decisions, keeping a log of progress. +More details [here](https://github.com/orgs/json-schema-org/discussions/35). -Using Github Discussions, we can collaborate on important decisions over a longer period of time and have a long standing point of reference +You can always catch up offline by watching the recordings on the JSON Schema YouTube channel. -# Why not just use Github Issues? +| Asset | Link | +|:-----------|:------------| +| πŸ”— APAC/Americas friendly Office Hours Meeting Link | [**Google meet Link**](http://meet.google.com/rmw-wgdx-bfc)
+| πŸ”— Europe/Americas friendly Office Hours Meeting Link | [**Google meet Link**](http://meet.google.com/ofg-mtnn-dqc)
+| πŸ”— Open Community Working Meeting Link | [**Google meet Link**](https://meet.google.com/raz-ptdn-ewf)
+| πŸŽ₯ Meeting Recordings | https://www.youtube.com/@JSONSchemaOrgOfficial -Github Issues are great for getting work done, but not so great at having threaded debates and discussions. +## Getting involved -Picking to use Github Discussions before creating an issue allows us to seek consensus in discussion and keep Issues as the space for tracking work product and its progress. +JSON Schema is a community that lives on its contributors. As we grow, we need more people to help others. Do you like to get involved? You can contribute in many ways! -# Who decided all this? Is it up for debate? +Please check out our [Contribution guidelines](CONTRIBUTING.md) to know more. -Ben Hutton (@relequestual) created this repo and initial readme on April 2021, based on the expectations of community and organisational needs having grown, supported, and observed the community over the past 5 years. +### Contributors -**None of this is set in stone. Humans are fallible. Everything is up for debate.** +Thanks goes to these wonderful people who contributed to this communtiy space: + + + -While Ben has become the self-appointed core team lead at some point during those 5 years, we strive to work on a model of general consensus, which works well for specification development, and is something we rely on to move us forward. +Made with [contributors-img](https://contrib.rocks). -Ben acts in several ways as an executive for the organisation, and feels trusted enough to make organisational decisions like this with the expectation of change and with as much transparency as possible. +## Code of Conduct +To get involved with our Community, please make sure you are familiar with our [Code of Conduct](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md). diff --git a/docs/blog-guidelines.md b/docs/blog-guidelines.md index 7e2265dd..d0b46b00 100644 --- a/docs/blog-guidelines.md +++ b/docs/blog-guidelines.md @@ -2,7 +2,7 @@ ## JSON Schema Blog Overview ## -The JSON Schema blog serves as a channel for project maintainers and contributors, implementation maintainers, and JSON Schema Champions to share content with the JSON Schema Community. +[The JSON Schema blog](https://json-schema.org/blog) serves as a channel for project maintainers and contributors, implementation maintainers, and JSON Schema Champions to share content with the JSON Schema Community. The content on our blog consists of: * Use cases and success stories @@ -45,8 +45,8 @@ The JSON Schema project will review the statement, as we do for the content for ## Promotion ## Please feel free to share the blog on social media. -## How to submit for consideration ## -Please submit your PR for consideration and we will start the PR process. If the article is not suitable for the JSON Schema blog, we will provide feedback and direction. +## How to submit an article for consideration ## +Please create an issue to introduce your blog idea as first step. If the article is not suitable for the JSON Schema blog, we will provide feedback and direction. Once the issue has been accepted you can proceed with the PR. Find here an example of [blog PR](https://github.com/json-schema-org/website/pull/177). ### Note on JSON Champions Until we publish an official definition of JSON Schema Champion, we consider JSON Schema Champions to experts, educators, authors, and event organizers relevant to the JSON Schema ecosystem. diff --git a/docs/deprecation-plan.md b/docs/deprecation-plan.md new file mode 100644 index 00000000..f182eddd --- /dev/null +++ b/docs/deprecation-plan.md @@ -0,0 +1,71 @@ +# Scope of this document + +This document is intenteded to describe the process to follow in case of breaking changes other than changes in the Specification. Changes in the Specification are handled by the Specification development process. + +# The process for breaking changes + +Once the decision to proceed with the breaking change has been made through an ADR, below is a recommend set of actions: + +1. **Determine if you need an exception process**. Some features may require extended migration periods to allow customers extended time to fully adopt a new solution. + +2. **Craft the message and build the internal enablement document**. This document should include frequently asked questions, timelines, and any other relevant information. The best approach here is to publish a blog post. + +3. **Share the message internally**. The best Slack channel for this announcement is #announcements. We will link a github announcement containing: + - Why we’re deprecating the feature. + - What is changing. + - What do you need to do?. + - When is this change comming into effect? The deprecation timeline. + +The announcement should communicate the timeline and the related ADR. This will be shared before sharing it publicly with users (This can be done in the same day). + +4. **Share with users at minimum 30-days in advance**. It is recommended to start with a broad social media announcement including a reference to a blog post with the same content than the Github announcement. + + +5. **Remind users twice**. 7 days and 1 day before. This is good practice to ensure that users hear the message and are following any migration steps required. The announcement will be shared in social media and Slack #announcements. + +6. **Execute the change**. + +## Example Content + +### Deprecation Blog +Below are some examples of deprecation blog-posts: + - https://learn.microsoft.com/en-us/power-platform/important-changes-coming + +### Announcement Message + + 🚨 JSON Schema Announcement 🚨 + + We will be deprecating XXXXXXXXXX on 1 April 2021 to XXXXXXXXXX. + + Read more about the change here πŸ‘‰ http-blog + Have questions? Join us on slack! + + +Below are some examples of deprecation announcements: + - https://twitter.com/SetProtocol/status/1652034604855967746 + - https://x.com/ShopwareDevs/status/1267813259689639938?s=20 + + +### 7- and 1-day Reminder Message + + Hi JSON Schema Community! + This is a reminder that XXXX will be deprecated in 1 week, on Monday, August 1. You can read more about the change on our blog πŸ‘‰ http-blog + + Have questions? Join us on slack! + +# Recommendations to communicate other critical changes + +The process described before will cover breaking changes, however we can use some of the practices described before to better handle other critical changes. For those cases this is the recommended process: + +1. **Share the message internally**. The best Slack channel for this announcement is #announcements. We will link a github announcement containing: + - What is changing. + - What do you need to do?. + - When is this change comming into effect? The deprecation timeline. + +The announcement should communicate the timeline. + +2. **Share with users at minimum 30-days in advance**. We'll use again Slack #announcements and a GitHub announcement. + +3. **Remind users twice**. 7 days and 1 day before. This is good practice to ensure that users hear the message. We'll use again Slack #announcements and a GitHub announcement. + +4. **Execute the change**. \ No newline at end of file diff --git a/docs/governance/supporting-info.md b/docs/governance/supporting-info.md new file mode 100644 index 00000000..91c2b669 --- /dev/null +++ b/docs/governance/supporting-info.md @@ -0,0 +1,46 @@ +# Supporting information for the governance process + +For the governance process of the JSON Schema Project, see the primary [GOVERNANCE.MD](https://github.com/json-schema-org/community/blob/main/GOVERNANCE.md) document. + +This document provides supporting resources in acknowledgement that parsing legalistic governance process documents can sometimes take considerable effort, and humans are error prone. + +## Workflow for voting + +The governance document specifies two ways to make decisions, decision making via consensus and decision making via voting. + +This section details the workflow of the voting process. +(The voting process may be different to the voting process found as part of the quick consensus process.) + +The following is a diagram generated from a Finite State Machine (FSM) created in Stately.ai. +One output is Mermaid, which is a diagram format rendered by GitHub! +It is not as good as viewing the Finite State Machine on Stately, which I would recommend, but it does give you an idea of what to expect. + +When you [view this FSM on Stately](https://stately.ai/registry/editor/embed/c53f8d7e-78fa-420e-bec7-59b8ce2471dd?machineId=140d0a50-b21c-462e-99d5-f13231127cb2), you can "run the simulation" (bottom right button) and step through the process, selecting the next action at each state. + +While this isn't a traditional flowchart, I feel the ability to interact with and step through the process outweighs any potential familiarity with flowchart diagrammatic representation. + +```mermaid +%% Generated with Stately Studio +stateDiagram-v2 + state "votingMachine" as votingMachine { + [*] --> votingMachine.Idle + votingMachine.Idle --> votingMachine.Awaiting_public_vote_setup : Call TSC Vote Public \ndo / Call for TSC vote + votingMachine.Idle --> votingMachine.Awaiting_approval_for_private_vote : Request private vote \ndo / Contact TSC Chairs + votingMachine.Awaiting_approval_for_private_vote --> votingMachine.Awaiting_additional_comment_for_counting_votes : Create Issue in private repo\nif [TSC Chair approved] + votingMachine.Voting_open --> votingMachine.Awaiting_extension_approval : request_extension \ndo / requestExtension + votingMachine.Voting_open --> votingMachine.VotingClosed : xstate.after(604800000)#votingMachine.Voting open \ndo / calculateQuorum + votingMachine.Awaiting_extension_approval --> votingMachine.Voting_open : approve_extension \ndo / extendVotingPeriod + votingMachine.Awaiting_approval_for_private_vote --> votingMachine.Idle : Not approved by chairs + votingMachine.Awaiting_extension_approval --> votingMachine.Voting_open : Extension not approved + votingMachine.Awaiting_public_vote_setup --> votingMachine.Awaiting_additional_comment_for_counting_votes : Create Issue in public TSC repo + votingMachine.Voting_open --> votingMachine.Voting_open : Cast Vote + votingMachine.Awaiting_additional_comment_for_counting_votes --> votingMachine.Voting_open : Create specific comment for voting on + state "Idle\n\nThe system is idle, awaiting a call for a public TSC vote or a request for a private vote." as votingMachine.Idle + state "Awaiting public vote setup" as votingMachine.Awaiting_public_vote_setup + state "Awaiting approval for private vote\n\nA TSC member requests a private vote by contacting the TSC Chairs. The issue is created in the TSC-private repository." as votingMachine.Awaiting_approval_for_private_vote + state "Voting open\n\nVoting is open and members can cast their votes using GitHub Reactions on the specified comment." as votingMachine.Voting_open + state "Awaiting extension approval\n\nA TSC member has requested a 7-day extension to the voting period.\n\nThis will not be unreasonably withheld." as votingMachine.Awaiting_extension_approval + state "VotingClosed\n\nVoting has closed. The votes are tallied, and the result is determined based on whether quorum was reached." as votingMachine.VotingClosed + state "Awaiting additional comment for counting votes" as votingMachine.Awaiting_additional_comment_for_counting_votes + } +``` diff --git a/programs/adopters/templates/socialmedia-promotion.md b/programs/adopters/templates/socialmedia-promotion.md new file mode 100644 index 00000000..36652d80 --- /dev/null +++ b/programs/adopters/templates/socialmedia-promotion.md @@ -0,0 +1,32 @@ +### Twitter Template + +πŸ“£ We are pleased to welcome _______ to the JSON Schema adopters list! + +XXXXXXX is a _______ + +https:// + +Visit our landscape and discover more organizations using JSON Schema: https://landscape.json-schema.org + +### Linkedin Template + +πŸ“£ πŸŽ‰ We are pleased to welcome _______ to the official list of JSON Schema adopters! + +_______ is a .... + +More about _______ πŸ‘‰ https:// + +Check out the JSON Schema Landscape to explore the leading organizations using JSON Schema: https://landscape.json-schema.org/ + +#ecosystem #jsonschema #adopters #production + + +### Slack + +:mega: :tada: We are pleased to welcome _______ to the official list of JSON Schema adopters! + +______ is a .... + +Check out the JSON Schema Landscape to explore the leading organizations using JSON Schema: https://landscape.json-schema.org/ + +Is your Organization using JSON Schema? Please join the Adopters group in the JSON Schema Landscape and help us to grow the JSON Schema Ecosystem by sharing your use case. \ No newline at end of file diff --git a/programs/ambassadors/README.md b/programs/ambassadors/README.md new file mode 100644 index 00000000..262f13c2 --- /dev/null +++ b/programs/ambassadors/README.md @@ -0,0 +1,62 @@ +This document covers the organizational and operational aspects of the JSON Schema Ambassadors Program. + +### What is the JSON Schema Ambassador Program? + +The JSON Schema Ambassador Program aims to bring JSON Schema closer to both current users and potential new project users. It also aims to provide users and community members with the necessary tools and resources to: + +- Promote collaboration among the JSON Schema ecosystem. +- Promote JSON Schema adoption in other ecosystems. +- Engage with the project in some way, either as a contributor, blogger, speaker, etc. +- Speak at community events or write technical content (e.g. blog posts) that solves JSON Schema's community needs. +- Nurture community growth and a welcoming environment to spread knowledge about JSON Schema. + +### How does the program work? + +- The ambassador selection process will be as transparent as possible. +- The TSC and existing ambassadors will evaluate applications according to compliance requirements via a traditional PR flow. +- All ambassadors information will be displayed on the JSON Schema website in a list after the PR is merged. + +### Ambassador requirements + +The participation will be determined and checked annually. The minimum requirement for being an ambassador is to make **4 contributions per year** in the form of articles, talks, videos, podcasts, presentations, driving initiatives, etc. + +Ambassadors can be invited to review content (i.e., articles, talks, videos) related to the community. These reviews are optional and will be counted as an additional contribution. + +Some clarifications on the type of contributions: + +- Articles, videos, and podcasts can be published on [json-schema.org/blog](https://json-schema.org/blog) or other domains. +- Talks and presentations can be displayed at different events or workshops. Within them, JSON Schema should appear at the core of the presentation. The presentation should not be being used as a disguised marketing tool for other products/projects. +- Special contributions should be driven to support the community or enhance its visibility (i.e., getting new sponsors or driving initiatives) +- If we do not notice or accidentally miscount a contribution, just let us know. + +Examples: + +1. If contributors publish 3 articles and drive 1 initiative about JSON Schema in eight months, they become ambassadors for the whole year. +2. If contributors make 1 presentation, write 2 articles, and drive 1 initiative, they become ambassadors for the whole year. +3. If you were accepted as ambassador on the 5th of May 2024, you have already fulfilled the requirements. On the 5th of May 2025, we will check if you qualify again after the 5th of May 2025. + +### Ambassadors duties + +- Be in tune with JSON Schema's mission and values. +- Always respect the [code of conduct](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md). +- Be active in your role as an ambassador. + +### Ambassador benefits + +- Visibility in the JSON Schema Ambassadors page of the JSON Schema website. +- Receive a special swag pack for Ambassadors (The swag availability date to be confirmed). +- Receive additional swag for conference or workshop participants (Swag availability date to be confirmed). +- Community-wide recognition. +- All our respect for your contributions! + +### Become a JSON Schema Ambassador + +The process of becoming an ambassador is very simple. Go to the **community** repository and open a PR to edit the `ambassadors.json` file. The TSC will then evaluate your candidacy! + +That PR doesn't have to be created by the ambassador candidate; any community member may open a PR to submit someone's application to the JSON Schema Ambassador Program. In these cases, the first step is to confirm the candidate's interest and once this as been clarified we'll proceed with the standard candidacy evaluation by the TSC. + +Get on board and become an ambassador! + +#### References and inspiration + +- [The AsyncAPI Ambassadors Program](https://github.com/asyncapi/community/blob/master/AMBASSADOR_ORGANIZATION.md) diff --git a/programs/ambassadors/ambassadors-schema.json b/programs/ambassadors/ambassadors-schema.json new file mode 100644 index 00000000..3fd203d2 --- /dev/null +++ b/programs/ambassadors/ambassadors-schema.json @@ -0,0 +1,132 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "array", + "description": "Array of contributor profiles", + "items": { + "type": "object", + "description": "Contributor profile", + "properties": { + "name": { + "type": "string", + "description": "Full name of the contributor" + }, + "img": { + "type": "string", + "format": "uri", + "description": "URL to the contributor's profile image" + }, + "bio": { + "type": "string", + "description": "Brief biography of the contributor" + }, + "title": { + "type": "string", + "description": "Professional title of the contributor" + }, + "github": { + "type": "string", + "description": "GitHub profile URL of the contributor" + }, + "twitter": { + "type": "string", + "description": "Twitter profile URL of the contributor" + }, + "mastodon": { + "type": "string", + "description": "Mastodon profile URL of the contributor" + }, + "linkedin": { + "type": "string", + "description": "LinkedIn profile URL of the contributor" + }, + "company": { + "type": "string", + "description": "Company where the contributor works" + }, + "country": { + "type": "string", + "description": "Country where the contributor is based" + }, + "contributions": { + "type": "array", + "description": "List of contributions made by the contributor", + "items": { + "type": "object", + "description": "Details of a specific contribution", + "properties": { + "type": { + "type": "string", + "enum": ["article", "talk", "adopter", "case study", "video", "other", "book", "paper", "initiative", "project", "working group", "community"], + "description": "Type of the contribution" + }, + "title": { + "type": "string", + "description": "Title of the contribution" + }, + "date": { + "type": "object", + "description": "Date of the contribution", + "properties": { + "year": { + "type": "integer", + "minimum": 1900, + "maximum": 2100, + "description": "Year of the contribution" + }, + "month": { + "type": "string", + "enum": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + "description": "Month of the contribution" + } + }, + "required": ["year", "month"] + }, + "link": { + "type": "string", + "format": "uri", + "description": "URL link to the contribution" + } + }, + "required": ["type", "title", "date", "link"] + } + }, + "startedOn": { + "type": "object", + "description": "Date of start", + "properties": { + "year": { + "type": "integer", + "minimum": 1900, + "maximum": 2100, + "description": "Year of start" + }, + "month": { + "type": "string", + "enum": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + "description": "Month of start" + } + }, + "required": ["year", "month"] + }, + "lastReviewedOn": { + "type": "object", + "description": "Date of last reviewed", + "properties": { + "year": { + "type": "integer", + "minimum": 1900, + "maximum": 2100, + "description": "Year of last reviewed" + }, + "month": { + "type": "string", + "enum": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + "description": "Month of last reviewed" + } + }, + "required": ["year", "month"] + } + }, + "required": ["name", "img", "bio", "title", "github", "company", "country", "contributions", "startedOn"] + } +} diff --git a/programs/ambassadors/ambassadors.json b/programs/ambassadors/ambassadors.json new file mode 100644 index 00000000..a2516403 --- /dev/null +++ b/programs/ambassadors/ambassadors.json @@ -0,0 +1,410 @@ +[ + { + "name": "Andreas Eberhart", + "img": "https://media.licdn.com/dms/image/v2/C5603AQFwzjco4Zp2iw/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1522155839579?e=1739404800&v=beta&t=A3Ki-Ct3mzO_0fTe6w_zWNj5z_1CCX0wpxxuDpCMxXA", + "bio": "With 25 years of professional experience, Andreas is very proficient in the areas of enterprise cloud, linked & big data, as well as systems architecture and development. He co-founded two startups and drove their growth resulting in two acquisitions by silicon valley giants HP and Veritas. Combined with his extensive background in cutting edge research, he has the unique ability to address projects from technical, time to market, and ROI angles. He holds a PhD in Computer Science from the University of SaarbrΓΌcken and a Master in Computer Science from Portland State University.", + "title": "CEO at Dashjoin", + "github": "aeberhart", + "twitter": "dashjoin", + "linkedin": "andreas-eberhart-94264a44", + "company": "Dashjoin", + "country": "πŸ‡©πŸ‡ͺ", + "contributions": [ + { + "type": "article", + "title": "JSON Schema, Schema.org, JSON-LD: What’s the Difference?", + "date": { + "year": 2020, + "month": "August" + }, + "link": "https://medium.com/@dashjoin/json-schema-schema-org-json-ld-whats-the-difference-e30d7315686a" + }, + { + "type": "video", + "title": "Supercharge your Angular Project with JSON Schema Forms", + "date": { + "year": 2020, + "month": "August" + }, + "link": "https://www.youtube.com/watch?v=Xk9dxbbBFjo" + }, + { + "type": "adopter", + "title": "Add Dashjoin to the JSON Schema Adopters list.", + "date": { + "year": 2024, + "month": "April" + }, + "link": "https://landscape.json-schema.org/" + }, + { + "type": "article", + "title": "JSON Schema, OpenAPI & Low Code: A Match Made in Heaven", + "date": { + "year": 2024, + "month": "October" + }, + "link": "https://dashjoin.medium.com/json-schema-openapi-low-code-a-match-made-in-heaven-d29723e543ac" + }, + { + "type": "article", + "title": "Generic and Extensible Web of Things Manager Using JSON Schema & AI", + "date": { + "year": 2024, + "month": "December" + }, + "link": "https://github.com/dashjoin/djapp-wot" + } + ], + "startedOn": { + "year": 2024, + "month": "July" + } + }, + { + "name": "David Biesack", + "img": "https://avatars.githubusercontent.com/u/545944?s=400&u=26818946106e2d8ae8c0cb5e0b72d6c7f612d268&v=4", + "bio": "Chief API Officer at APiture (I design banking APIs with OpenAPI 3.1, JSON Schema 2020/12) and author of the API Design Matters blog, https://apidesignmatters.substack.com/ ", + "title": "Chief API Officer", + "github": "DavidBiesack", + "mastodon": "@DavidBiesack@fosstodon.org", + "linkedin": "davidbiesack", + "company": "Apiture", + "country": "πŸ‡ΊπŸ‡Έ", + "contributions": [ + { + "type": "article", + "title": "Composing API Models with JSON Schema", + "date": { + "year": 2023, + "month": "June" + }, + "link": "https://apidesignmatters.substack.com/p/composing-api-models-with-json-schema" + }, + { + "type": "article", + "title": "Master JSON Schema's Subtleties", + "date": { + "year": 2023, + "month": "July" + }, + "link": "https://apidesignmatters.substack.com/p/master-json-schemas-subtleties" + }, + { + "type": "article", + "title": "Master More JSON Schema's Subtleties", + "date": { + "year": 2023, + "month": "July" + }, + "link": "https://apidesignmatters.substack.com/p/master-more-json-schemas-subtleties" + }, + { + "type": "article", + "title": "Learning the Language of API Data", + "date": { + "year": 2023, + "month": "May" + }, + "link": "https://apidesignmatters.substack.com/p/learning-the-language-of-api-data" + }, + { + "type": "other", + "title": "What is JSON Schema?", + "date": { + "year": 2024, + "month": "June" + }, + "link": "https://github.com/json-schema-org/website/pull/679" + }, + { + "type": "talk", + "title": "Wielding the Double-Edged Sword of JSON Schema", + "date": { + "year": 2022, + "month": "September" + }, + "link": "https://www.youtube.com/watch?v=6ukZEUBRpqo" + } + ], + "startedOn": { + "year": 2024, + "month": "July" + } + }, + { + "name": "Juan Cruz Viotti", + "img": "https://avatars.githubusercontent.com/u/2192773?v=4", + "bio": "Founder at Sourcemeta, consultant, and author", + "title": "Founder", + "github": "jviotti", + "linkedin": "jviotti", + "company": "Sourcemeta", + "country": "πŸ‡§πŸ‡΄", + "contributions": [ + { + "type": "project", + "title": "Alterschema", + "date": { + "year": 2022, + "month": "May" + }, + "link": "https://alterschema.sourcemeta.com" + }, + { + "type": "article", + "title": "How the W3C Web of Things brings JSON Schema to the Internet of Things", + "date": { + "year": 2022, + "month": "October" + }, + "link": "https://json-schema.org/blog/posts/w3c-wot-case-study" + }, + { + "type": "project", + "title": "Learn JSON Schema", + "date": { + "year": 2023, + "month": "March" + }, + "link": "https://www.learnjsonschema.com" + }, + { + "type": "article", + "title": "Understanding JSON Schema Lexical and Dynamic Scopes", + "date": { + "year": 2024, + "month": "February" + }, + "link": "https://json-schema.org/blog/posts/understanding-lexical-dynamic-scopes" + }, + { + "type": "book", + "title": "Unifying Business, Data, and Code: Designing Data Products with JSON Schema", + "date": { + "year": 2024, + "month": "January" + }, + "link": "https://www.oreilly.com/library/view/unifying-business-data/9781098144999/" + }, + { + "type": "initiative", + "title": "GSoC 2024: Upgrade/Downgrade Rules", + "date": { + "year": 2024, + "month": "March" + }, + "link": "https://github.com/json-schema-org/community/issues/599" + }, + { + "type": "talk", + "title": "Applying Software Engineering Practices to Schemas", + "date": { + "year": 2024, + "month": "December" + }, + "link": "http://conference.json-schema.org" + } + ], + "startedOn": { + "year": 2024, + "month": "August" + } + }, + { + "name": "Esther Okafor", + "img": "https://media.licdn.com/dms/image/v2/D4D03AQGO8M-VFQJvAQ/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1719478757384?e=1739404800&v=beta&t=N6GOewG0on7VdbwaEWMjPkXxY9o0haL5ek5rX9rEHcc", + "bio": "I am a QA engineer currently working with Storyblok. I am passionate about quality and making sure software design systems are developed with the highest standards", + "title": "Test engineer at Storyblok", + "github": "Estherokafor05/My-portfolio", + "twitter": "Estherokafor_", + "linkedin": "okaforesther/", + "company": "Storyblok", + "country": "Nigeria", + "contributions": [ + { + "type": "article", + "title": "Postman Series - writing assertions and validating responses", + "date": { + "year": 2024, + "month": "May" + }, + "link": "https://estherokafor.com/postman-series-writing-assertions-and-validating-responses" + }, + { + "type": "article", + "title": "Beyond Assertions: Data Validation using Cypress with JSON Schema in End-to-End Testing", + "date": { + "year": 2024, + "month": "May" + }, + "link": "https://estherokafor.com/beyond-assertions-data-validation-using-cypress-with-json-schema-in-end-to-end-testing" + }, + { + "type": "article", + "title": "Beyond Basics: Leveraging JSON Schema for API Security Testing", + "date": { + "year": 2024, + "month": "June" + }, + "link": "https://estherokafor.com/beyond-basics-leveraging-json-schema-for-api-security-testing" + }, + { + "type": "talk", + "title": "Beyond Code: A qa's perspective to API design", + "date": { + "year": 2024, + "month": "July" + }, + "link": "https://www.canva.com/design/DAGJgnhNUYA/GLVTP-Yx7wcBVFjOhsN2uQ/edit?utm_content=DAGJgnhNUYA&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton" + } + ], + "startedOn": { + "year": 2024, + "month": "August" + } + }, + { + "name": "Ege Korkan", + "img": "https://media.licdn.com/dms/image/v2/D4D03AQG03-U--zDJpw/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1707341764311?e=1739404800&v=beta&t=jO5SgCnwdAKU1sRapA7-DzVq-p4tzu5GvNV_aJnci-k", + "bio": "Research and standardization focused engineer at Siemens with a passion to drive interoperability across all levels.", + "title": "Web of Things Expert at Siemens", + "github": "egekorkan", + "twitter": "egekorkan", + "linkedin": "ege-korkan", + "mastodon":"@egekorkan@mastodon.social", + "company": "Siemens AG", + "country": "Germany", + "contributions": [ + { + "type": "article", + "title": "Generic and Extensible Web of Things Manager Using JSON Schema & AI", + "date": { + "year": 2024, + "month": "December" + }, + "link": "https://github.com/dashjoin/djapp-wot" + }, + { + "type": "talk", + "title": "One Year Update: Using LinkML in Web of Things Specifications", + "date": { + "year": 2024, + "month": "September" + }, + "link": "https://www.w3.org/events/meetings/e5cb0ff4-1696-4367-b9fe-9e74c5034dd3/" + }, + { + "type": "article", + "title": "How the W3C Web of Things brings JSON Schema to the Internet of Things", + "date": { + "year": 2022, + "month": "October" + }, + "link": "https://json-schema.org/blog/posts/w3c-wot-case-study" + }, + { + "type": "project", + "title": "Web of Things Tutorial which contains a part on JSON Schema", + "date": { + "year": 2024, + "month": "January" + }, + "link": "https://w3c.github.io/wot-cg/tutorials/whatiswot/docs/preliminary/json-schema/intro" + }, + { + "type": "adopter", + "title": "Add Standards Category to the JSON Schema Adopters list.", + "date": { + "year": 2024, + "month": "May" + }, + "link": "https://landscape.json-schema.org/" + }, + { + "type": "working group", + "title": "Web of Things Working Group participation at the W3C, which is using JSON Schema", + "date": { + "year": 2018, + "month": "September" + }, + "link": "https://www.w3.org/WoT/" + }, + { + "type": "project", + "title": "JSON Spell-checker based on JSON Schema", + "date": { + "year": 2023, + "month": "January" + }, + "link": "https://github.com/eclipse-thingweb/playground/tree/master/packages/json-spell-checker" + } + ], + "startedOn": { + "year": 2024, + "month": "August" + } + }, + { + "name": "Jeremy Fiel", + "img": "https://avatars.githubusercontent.com/u/32110157?v=4", + "bio": "Originally, an international logistics expert with more than 15 years of professional experience, Jeremy transitioned to software, specifically APIs, about 8 years ago. His passion for learning and contributing back to the community is where he found a love for open source projects. He is now a consistent contributor to projects such as [Redocly](https://github.com/redocly) and the [OpenAPI Initiative](https://github.com/OAI) projects, and a very active community member of JSON Schema.", + "title": "Principal Software Engineer | OpenAPI | JSON Schema | Arazzo | APIs", + "github": "jeremyfiel", + "twitter": "jeremyfiel", + "linkedin": "jeremyfiel", + "company": "ADP, Inc.", + "country": "US", + "contributions": [ + { + "type": "project", + "title": "Schema author of OpenAPI Initiative's Arazzo Specification v1.0 JSON Schema", + "date": { + "year": 2024, + "month": "August" + }, + "link": "https://github.com/oai/arazzo-specification/schemas/v1.0/schema.yaml" + }, + { + "type": "project", + "title": "OSS contributor for Redocly CLI", + "date": { + "year": 2023, + "month": "April" + }, + "link": "https://github.com/redocly/redocly-cli" + }, + { + "type": "other", + "title": "JSON Schema Slack Community Member", + "date": { + "year": 2021, + "month": "November" + }, + "link": "https://json-schema.slack.com" + }, + { + "type": "other", + "title": "JSON Schema Stack Overflow Community Member", + "date": { + "year": 2021, + "month": "November" + }, + "link": "https://stackoverflow.com/questions/tagged/json-schema" + }, + { + "type": "adopter", + "title": "Add ADP, Inc. to the JSON Schema Adopters list.", + "date": { + "year": 2023, + "month": "October" + }, + "link": "https://landscape.json-schema.org/" + } + ], + "startedOn": { + "year": 2024, + "month": "September" + } + } +] diff --git a/programs/community-manager/Onyedikachi Community Manager Scope of Work.pdf b/programs/community-manager/Onyedikachi Community Manager Scope of Work.pdf new file mode 100644 index 00000000..13627b7b Binary files /dev/null and b/programs/community-manager/Onyedikachi Community Manager Scope of Work.pdf differ diff --git a/programs/contractors/README.md b/programs/contractors/README.md new file mode 100644 index 00000000..568e2ae3 --- /dev/null +++ b/programs/contractors/README.md @@ -0,0 +1,18 @@ +This document covers the organizational and operational aspects of the JSON Schema Contractor Program. + +### What is the JSON Schema Contractor Program? + +The JSON Schema Contractor Program aims to promote official professional services around JSON Schema coming from TSC members and Ambassadors, connecting companies with the key people they need to be successful with JSON Schema, while promoting the sustainability of the JSON Schema organization. + +### How does the program work? + +- The TSC and existing ambassadors can opt-in to be listed as contractors at any time. +- All contractor information will be displayed on the JSON Schema website. + +### Contractor requirements + +The participation will be determined and checked annually. The only requirement for being listed as a contractor is being a current TSC member or a current Ambassador. + +### Become an JSON Schema Contractor + +The process of becoming a listed contractor is very simple. Go to the **community** repository and open a PR to edit the `contractors.json` file. The TSC will then evaluate your candidacy! diff --git a/programs/contractors/contractors-schema.json b/programs/contractors/contractors-schema.json new file mode 100644 index 00000000..56964b19 --- /dev/null +++ b/programs/contractors/contractors-schema.json @@ -0,0 +1,77 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "array", + "description": "Array of contractor profiles", + "items": { + "type": "object", + "description": "Contractor profile", + "properties": { + "name": { + "type": "string", + "description": "Full name of the contractor" + }, + "bio": { + "type": "string", + "description": "Biography of the contractor" + }, + "email": { + "type": "string", + "format": "email", + "description": "E-mail address of the contractor" + }, + "website": { + "type": "string", + "format": "url", + "description": "Website URL of the contractor" + }, + "github": { + "type": "string", + "description": "GitHub profile URL of the contractor" + }, + "x": { + "type": "string", + "description": "X profile URL of the contractor" + }, + "mastodon": { + "type": "string", + "description": "Mastodon profile URL of the contractor" + }, + "linkedin": { + "type": "string", + "description": "LinkedIn profile URL of the contractor" + }, + "incorporatedIn": { + "type": "array", + "description": "Countries where the contractor is incorporated", + "items": { + "type": "string" + } + }, + "type": { + "enum": [ "tsc", "ambassor" ], + "description": "Status of the contractor in the JSON Schema organization" + }, + "links": { + "type": "array", + "description": "List of key links to showcase", + "items": { + "type": "object", + "description": "Details of a specific link", + "properties": { + "title": { + "type": "string", + "description": "Title of the link" + }, + "url": { + "type": "string", + "format": "uri", + "description": "The link URL" + } + }, + "required": ["title", "url"] + } + } + }, + "required": ["name", "bio", "type", "github", "incorporatedIn", "links"] + } +} diff --git a/programs/contractors/contractors.json b/programs/contractors/contractors.json new file mode 100644 index 00000000..d2461426 --- /dev/null +++ b/programs/contractors/contractors.json @@ -0,0 +1,88 @@ +[ + { + "name": "Juan Cruz Viotti", + "github": "jviotti", + "linkedin": "jviotti", + "email": "jv@jviotti.com", + "website": "https://www.jviotti.com", + "type": "tsc", + "incorporatedIn": [ "UK" ], + "bio": "I'm a TSC member of JSON Schema, did award-winning research at the University of Oxford in the space of binary serialization and compression using JSON Schema, co-authored an O'Reilly book covering JSON Schema, and own several projects in the ecosystem, ranging educational material like LearnJSONSchema.com to a high-performance C++ JSON Schema compiler and validator. I have experience helping organizations be successful with JSON Schema in the Data, API, and IoT spaces all the way from architecture, ontology design, and XML migrations to training and custom development. I'm eager to help you take your JSON Schema integrations to the next level!", + "links": [ + { + "title": "O'Reilly Book: Unifying Business, Data, and Code: Designing Data Products with JSON Schema", + "url": "https://learning.oreilly.com/library/view/unifying-business-data/9781098144999/" + }, + { + "title": "JSON Schema CLI: The CLI for working with JSON Schema. Covers formatting, linting, testing, bundling, and more for both local development and CI/CD pipelines", + "url": "https://github.com/intelligence-ai/jsonschema" + }, + { + "title": "JSON BinPack: binary serialization with JSON Schema, more space-efficient than Protocol Buffers and similar alternatives (work in progress)", + "url": "https://jsonbinpack.sourcemeta.com" + }, + { + "title": "AlterSchema: Automatic upgrades between versions of JSON Schema (downgrades coming soon)", + "url": "https://alterschema.sourcemeta.com" + }, + { + "title": "Blaze: the ultra high-performance JSON Schema validator, providing validation in the nano-second range, along with perfect compliance scores. Supports Draft 4, Draft 6, Draft 7, 2019-09 and 2020-12", + "url": "https://github.com/sourcemeta/blaze" + }, + { + "title": "Blog post: A deep dive on lexical and dynamic scopes, essential for understanding more advanced topics like dynamic referencing", + "url": "https://json-schema.org/blog/posts/understanding-lexical-dynamic-scopes" + } + ] + }, + { + "name": "Julian Berman", + "github": "Julian", + "linkedin": "julian-berman", + "email": "Julian+JSON.Schema@GrayVines.com", + "type": "tsc", + "incorporatedIn": [], + "bio": "Julian is an experienced engineering leader, JSON Schema TSC member and a member of the JSON Schema core team for over 10 years. He founded the JSON Schema Test Suite and Bowtie projects, helping countless implementers (and users) of all JSON Schema implementations ensure compliance with the specification. He also wrote and maintains the most widely used Python implementation of JSON Schema, along with a large number of projects in its orbit, and is a long-time contributor to the wider open source Python ecosystem. He has deep experience running engineering teams (in previous lives in the context of machine learning for large-enterprise consumer experience marketing). He also is a lecturer at Columbia University, who cares deeply about ensuring technology is accessible and easy to understand for all. Let him help your organization get smarter about how you use JSON Schema, how you collaborate with it across teams, and how you effectively build reliable production systems which leverage JSON Schema.", + "links": [ + { + "title": "python-jsonschema, the most widely used Python implementation of JSON Schema for over 10 years", + "url": "https://github.com/python-jsonschema/jsonschema/" + }, + { + "title": "Bowtie, a meta-validator for using JSON Schema implementations across every programming language in the world", + "url": "https://bowtie.report" + }, + { + "title": "The official JSON Schema Test Suite, a large collection of compliance tests for the JSON Schema specification used by many or most implementations of JSON Schema", + "url": "https://github.com/json-schema-org/JSON-Schema-Test-Suite" + } + ] + }, + { + "name": "Jason Desrosiers", + "github": "jdesrosiers", + "linkedin": "jason-desrosiers", + "email": "jason@hyperjump.io", + "type": "tsc", + "incorporatedIn": ["California, USA"], + "bio": "Jason is a recognized expert and active contributor to the JSON Schema community with over a decade of experience. As a member of the Technical Steering Committee (TSC), he has helped shape the specification and establish best practices. In addition, Jason has developed innovative techniques for writing complex schemas that are scalable, maintainable, efficient, and produce error messages that are clear and helpful.\n\nAs the author and maintainer of the `@hyperjump/json-schema` validator, Jason has created an implementation that is widely regarded as a trusted reference for understanding and verifying correct behavior in complex scenarios.\n\nJason is also highly knowledgeable in using JSON Schema and JSON Hyper-Schema to design APIs that are easy to use, well-documented, and adaptable over time. He helps teams build APIs that not only meet immediate needs but also ensure smooth evolution as business requirements change, making it easier to maintain and scale them as the organization grows.\n\nIn addition to his JSON Schema expertise, Jason holds a Master's degree in Software Engineering and brings extensive experience in Pair/Mob Programming, Test-Driven Development, and coaching teams to improve their coding skills and productivity. He specializes in hands-on collaboration, working alongside teams to teach practical skills in the context of their real-world projects.\n\nIf you need expert guidance on JSON Schema, API design, schema development, or improving your team’s development practices, reach out to Jason to discuss your needs.", + "links": [ + { + "title": "@hyperjump/json-schema -- A JSON Schema implementation with support for every validation, annotations, bundling, and more in every JSON Schema dialect since draft-04.", + "url": "https://github.com/hyperjump-io/json-schema" + }, + { + "title": "Blog post -- Validating OpenAPI and JSON Schema", + "url": "https://json-schema.org/blog/posts/validating-openapi-and-json-schema" + }, + { + "title": "Blog post -- Towards a stable JSON Schema", + "url": "https://json-schema.org/blog/posts/future-of-json-schema" + }, + { + "title": "API Specifications Conference 2021 - Maintaining JSON Schemas at Scale", + "url": "https://www.youtube.com/watch?v=GjJpRsVffg0" + } + ] + } +] diff --git a/programs/cross-language-coverage/README.md b/programs/cross-language-coverage/README.md new file mode 100644 index 00000000..99b78a12 --- /dev/null +++ b/programs/cross-language-coverage/README.md @@ -0,0 +1,74 @@ +# Cross-language Implementation Quality + +This directory collects metrics to assist in confirming the presence of (at least one) "high quality" implementations across programming languages. + +Absence from this directory is not meant to be a slight against anyone or anyone's work certainly. + +The goals are to identify gaps in the ecosystem that might need assistance, and ultimately to help the JSON Schema ecosystem and its users in finding solid, compliant implementations. + +The intial collection of TODO programming languages which appears below is simply a starting point, based largely on: + + * the [GitHub popularity list](https://octoverse.github.com/2022/top-programming-languages) + * the [TIOBE index](https://www.tiobe.com/tiobe-index/) + +where it combines languages at the top of the popularity list with those on the rising / fastest growing list. + +You can help this exercise! +For each language, we wish to track whether one or more known implementations exist which: + + * Fail less than 2% (around 30) tests from the official JSON Schema test suite + (This 2% number was chosen simply because it represents the dividing point between one cluster of implementations supported by Bowtie. + Above this number is a collection of implementations failing larger orders of magnitude of tests). + * Supports one of the most recent 2 releases of JSON Schema + * Has had a release of itself in the last 3 years + * Has had some human-authored commit in the last year + * Does not have explicit indication, by its maintainer or documentation, that it is not production ready + +and then highlight any languages for which this is not the case. + +For languages that *do* have one or more such implementations, we then wish to include: + + * the name and link to the implementation + * the date of its last commit + * the date of its last release + * the number of open security vulnerabilities it has, if known + * the number of open issues it has on its issue tracker + * the number of open pull requests it has + * whether it implements some or all of the interfaces specified on our Common Interfaces page (https://json-schema.org/implementers/interfaces), + and if so, which + +A number of the above data points are likely to change often. +We therefore assume only some of the above should be tracked in this directory, and the remainder will be retrieved programmatically if or when this information is used. + +An example entry for this directory is: + +```yaml +language: Blub +implementations: + - name: jsonschema-ftw + url: https://example.com/someone/jsonschema-ftw + known_to_have: + many_failing_tests: false + recent_draft_support: true + recent_release: true + recent_commit: true + non_production_status: false + metrics: + # last_commit_date: fetched from GitHub + # last_release_date: fetched from GitHub + # open_security_vulnerabilities: fetched from GitHub + # open_issues: fetched from GitHub + # open_prs: fetched from GitHub + known_interfaces: + instance-validation: https://docs.jsonschema-ftw.com/validation/validate_function + version-detection: https://docs.jsonschema-ftw.com/validation/version_of_schema +``` + +Note that *not* all of the above must precisely match in order to be considered for inclusion! +Specifically, an implementation with *no* recent commits is not disqualified from being considered "high quality". +One with a high number of failing tests however, is indeed likely not to meet the definition. +The above is simply meant to track these data points without necessarily imposing all of them as gospel -- users of these libraries should make their own judgements there. + +Please pick a language you're familiar with and feel free to fill in such an entry! + +Feedback on this format itself is also welcome in an issue! diff --git a/programs/implementers/templates/socialmedia-promotion.md b/programs/implementers/templates/socialmedia-promotion.md new file mode 100644 index 00000000..6a5a994e --- /dev/null +++ b/programs/implementers/templates/socialmedia-promotion.md @@ -0,0 +1,29 @@ +### Twitter Template + +πŸŽ‰πŸŽ‰ We are so excited to announce the latest addition to the JSON Schema Implementations page! + +------- is a ------- by ------ + +Check it out! πŸ”— https://github.com/JulianCataldo/remark-lint-frontmatter-schema + +For more tooling visit: https://json-schema.org/implementations + +### Linkedin Template + +πŸŽ‰πŸŽ‰ We are so excited to announce the latest addition to the JSON Schema Implementations page! + +⭐️ ------- ⭐️ is a ------- by ------ + +Check it out! πŸ”— Link + +Please, visit the JSON Schema Implementations page to explore all the implementations available in the Ecosystem πŸ”— https://json-schema.org/implementations + +### Slack + +πŸŽ‰πŸŽ‰ We are so excited to announce the latest addition to the JSON Schema Implementations page! + +⭐️ ------- ⭐️ is a ------- by ------ + +Check it out! πŸ”— Link + +Please, visit the JSON Schema Implementations page to explore all the implementations available in the Ecosystem πŸ”— https://json-schema.org/implementations \ No newline at end of file diff --git a/programs/mentoring/gsoc/CONTRIBUTOR-GUIDANCE.md b/programs/mentoring/gsoc/CONTRIBUTOR-GUIDANCE.md new file mode 100644 index 00000000..b2cf19d7 --- /dev/null +++ b/programs/mentoring/gsoc/CONTRIBUTOR-GUIDANCE.md @@ -0,0 +1,53 @@ +# :wave: Hey there + +We're very happy that you are considering contributing to our projects during Google Summer of Code. Please **introduce yourself** on the available [project ideas](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc). + +You can introduce yourself to the project anytime before the contributor application period begins by answering the following questions on the selected [idea's thread](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-des). + +Make sure to answer these questions: + +- [ ] What interests you most about this project? +- [ ] As mentors and project coordinators, how can we get the best out of you? +- [ ] Is there anything that you’ll be studying or working on whilst working alongside us? +- [ ] We'd love to hear a bit about your work preferences, e.g. how you keep yourself organized, what tools you use, etc? +- [ ] Once you’ve selected a project from the ideas section, please suggest a weekly schedule with clear milestones and deliverables around it. Alternatively, if you want to propose your own idea then please include an outline, goals, and a well-defined weekly schedule with clear milestones and deliverables. + +MANDATORY QUALIFICATION TASK: +Please engage on your selected project (link to each GitHub repo is in the issue description) by completing the mandatory qualification task available in the comments. + +Please complete the matching mandatory qualification task before you apply through the GSoC platform before the contributor application deadline. + +**Applications without completed mandatory qualification task will not be considered**. + +## How to apply + +1. **Choose one** of the projects available in the [list](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc). +2. **Talk with the mentor** in Slack about what they expect of GSoC applicants and get help from them to prepare your application. +3. **Complete the qualification task** available as comment in the project issue. +4. **Write your application**. All applications must go through Google's official application form. You can read an application template [here](#application-template). +5. **Submit your application to Google before the deadline.** We actually recommend you submit a few days early to avoid last minute issues. + +## Application Template + +An ideal application will contain the following: +1. A descriptive Title. +2. Information about you, including full contact information. Which time zone you're in. Describe your academic studies, any previous work, internships, relevant work experience and list your skills that will help you to achieve the goal. +3. Link to open source projects you have contributed to. Links to your pull requests or code samples goes here. +4. Information about your view on the chosen project. +5. Information about other commitments that might affect your ability to work during the GSoC period. (e.g. classes, exams, job, holidays etc.) + +## Selection Criteria + +We will select the best proposals based on the following criteria: +(The quantity of students depends on the number of JSON Schema projects accepted in GSoC) + +- The quality of the proposal and its priority for JSON Schema Project. This includes the qualification task/tasks. +- Engagement of the student with the community and potential mentors. +- Contributions by the student to the JSON Schema Project & Community. +- Contributing to other Open Source Projects is a plus. + +## Getting in Contact + +- **GitHub:** Please use [Issues](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc) to comment on project ideas, ask questions and collaborate. +- **Slack:** Please join us in our [slack workspace](https://json-schema.org/slack). All GSoC discussions are are hapenning in the [`#gsoc`](https://json-schema.slack.com/archives/C04MVQSRBRS) channel. + diff --git a/programs/mentoring/gsoc/README.md b/programs/mentoring/gsoc/README.md new file mode 100644 index 00000000..9622ae07 --- /dev/null +++ b/programs/mentoring/gsoc/README.md @@ -0,0 +1,62 @@ + +![gsoc-banner](https://github.com/json-schema-org/community/assets/40007659/7d7d3f1d-6f4a-4139-98fb-96aa3354b777) + +# Welcome to Google Summer of Code with JSON Schema! + +## πŸ‘‹ What is JSON Schema ? + +JSON Schema is a declarative language that provides a standardized way to describe and validate JSON data. + +We are a community JSON Schema enthusiast dedicated to maintain, evolve and promote the JSON Schema specification. The Community consists of individuals, community members, tooling builders, schema designers, researchers, and representatives from companies and organizations who use or are considering using JSON Schema. + +## πŸ’‘ GSoC Project Ideas + +### Current GSoC edition (2025) project ideas + +Project ideas for this year's program are forthcoming. Check back soon [here](gsoc-2025.md). + +### Past GSoC editions project ideas + +- 2023 [ideas](gsoc-2023.md) +- 2024 [ideas](gsoc-2024.md) + +## 🎯 Why choosing a JSON Schema project? + +The JSON Schema Community is welcoming and supportive. Some of the most active members today joined because of their participation in past GSoC editions, which a clear evidence of how positive the experience has been for them. Our mentors have extensive mentoring experience, you will have the best support before, during and after the program. + +JSON Schema is massively adopted in the industry. By contributing to one of our projects you would have the opportunity to have an impact in the global developer Community. + +Other benefits of choosing a JSON Schema project: +- Gain practical experience working on real-world projects utilizing JSON Schema. +- Enhance your technical and interpersonal skills, including software development and contributions to open source. +- Collaborate with a mentor who will provide ongoing support and guidance throughout the program. +- Expand your professional network by connecting with fellow students, community members, and industry experts. +- Upon successful completion of your project, you may be invited to speak at our community events and we will be here to help and provide feedback and assistance with your future projects. +- Receive a stipend from Google for your participation in the program. + +## πŸ€™ Getting in Contact + +- **GitHub:** Please use [Issues](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc) to comment on project ideas, ask questions and collaborate. +- **Slack:** Please join us in our [slack workspace](https://json-schema.org/slack). All GSoC discussions are are hapenning in the [`#gsoc`](https://json-schema.slack.com/archives/C04MVQSRBRS) channel. + +Please see our [Code of Conduct](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md) + +## 🀝 Getting Help +Got a problem? Reach out to mentors or the community for assistance. Remember, mentors are listed, but other community members can also lend a hand. When talking to non-mentors: + +- Introduce yourself. +- Discuss tasks based on personal interest, not just the contest. +- Explain technical decisions independently. +- Consult mentors for guidance on task evaluation. + + +## 🫢 How to get involved before GSoC? + +If you join our organization before GSoC, we invite you to join us contributing to JSON Schema as a great way to start engaging with the Team, learn about the JSON Schema specification and get to know some of our projects. + +Please check out our [Contribution guidelines](https://github.com/json-schema-org/.github/blob/main/CONTRIBUTING.md) to know more about how to contribute in each area. + +## πŸ— GSoC Contributor Guidance + +Please, check-out the [GSoC Contributior Guidance](CONTRIBUTOR-GUIDANCE.md) + diff --git a/gsoc/gsoc-2023.md b/programs/mentoring/gsoc/gsoc-2023.md similarity index 100% rename from gsoc/gsoc-2023.md rename to programs/mentoring/gsoc/gsoc-2023.md diff --git a/programs/mentoring/gsoc/gsoc-2024.md b/programs/mentoring/gsoc/gsoc-2024.md new file mode 100644 index 00000000..f662fb09 --- /dev/null +++ b/programs/mentoring/gsoc/gsoc-2024.md @@ -0,0 +1,86 @@ + +![gsoc-banner](https://github.com/json-schema-org/community/assets/40007659/7d7d3f1d-6f4a-4139-98fb-96aa3354b777) + +# Welcome to Google Summer of Code 2024 with JSON Schema! + +JSON Schema will be applying to 2024's Google Summer of Code Program as a mentoring organization. In case of being accepted, we will receive applications within the timeframe allocated by GSoC. + +## Timeline for GSoC 2024 + +[Full timeline](https://developers.google.com/open-source/gsoc/timeline) + +|Important dates | Deadline| +| ----- | ----- | +| Organization Applications Open | January 22, 2024| +| Organization Application Deadline | February 6, 2024 | +| Organizations Announced | February 21, 2024 | +| Potential GSoC contributors discuss application ideas with mentoring organizations | February 22 - March 18, 2024 | +| GSoC contributor application period | March 18 - April 2, 2024 | +| Accepted GSoC Contributor projects announced | May 1, 2024 | +| Contributors work on their Google Summer of Code projects | May 27, 2024 - August 26, 2024| +| Mentors submit final GSoC contributor evaluations (standard coding period) | August 26, 2024 - September 2, 2024| +| Initial results of Google Summer of Code 2024 announced | September 3, 2024 | + +## [Project Ideas](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc) +Here is the list of our 2024 project ideas: +- [#607](https://github.com/json-schema-org/community/issues/607): **`bowtie-trend`: Long-Term Reporting With Bowtie** +- [#605](https://github.com/json-schema-org/community/issues/605): **`bowtie-perf`: a Performance Tester for JSON Schema implementations** +- [#603](https://github.com/json-schema-org/community/issues/603): **Setting up the CI/CD Pipeline for the JSON Schema website** +- [#602](https://github.com/json-schema-org/community/issues/602): **Build a new version of the JSON Schema tooling page** +- [#601](https://github.com/json-schema-org/community/issues/601): **JSON Schema Language Server Contributions** +- [#599](https://github.com/json-schema-org/community/issues/599): **Define upgrade/downgrade language agnostic declarative transformation rules for all JSON Schema dialects** +- [#614](https://github.com/json-schema-org/community/issues/614): **Source Generation Analyzer Powered by Corvus.JsonSchema (.Net)** +- [#645](https://github.com/json-schema-org/community/issues/645): **A tour of JSON Schema** +- ~~[#609](https://github.com/json-schema-org/community/issues/609): **New Bowtie Test Case Widgets**~~ +- ~~[#606](https://github.com/json-schema-org/community/issues/606): **jsonschema.lean -- an implementation of JSON Schema in Lean**~~ + +## Why choosing a JSON Schema project? + +The JSON Schema Community is welcoming and supportive. Some of the most active members today joined because of their participation in past GSoC editions, which a clear evidence of how positive the experience has been for them. Our mentors have extensive mentoring experience, you will have the best support before, during and after the program. + +JSON Schema is massively adopted in the industry. By contributing to one of our projects you would have the opportunity to have an impact in the global developer Community. + +Other benefits of choosing a JSON Schema project: +- Gain practical experience working on real-world projects utilizing JSON Schema. +- Enhance your technical and interpersonal skills, including software development and contributions to open source. +- Collaborate with a mentor who will provide ongoing support and guidance throughout the program. +- Expand your professional network by connecting with fellow students, community members, and industry experts. +- Upon successful completion of your project, you may be invited to speak at our community events and we will be here to help and provide feedback and assistance with your future projects. +- Receive a stipend from Google for your participation in the program. + +## How to apply + +1. **Choose one** of the projects available in the list. +2. **Talk with the mentor** in Slack about what they expect of GSoC applicants and get help from them to prepare your application. +3. **Complete the qualification task** available as comment in the project issue. +4. **Write your application**. All applications must go through Google's official application form. You can read an application template [here](#application-template). +5. **Submit your application to Google before the deadline.** We actually recommend you submit a few days early to avoid last minute issues. + +## Application Template + +An ideal application will contain the following: +1. A descriptive Title. +2. Information about you, including full contact information. Which time zone you're in. Describe your academic studies, any previous work, internships, relevant work experience and list your skills that will help you to achieve the goal. +3. Link to open source projects you have contributed to. Links to your pull requests or code samples goes here. +4. Information about your view on the chosen project. +5. Information about other commitments that might affect your ability to work during the GSoC period. (e.g. classes, exams, job, holidays etc.) + +## Getting in Contact + +- **GitHub:** Please use [Issues](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc) to comment on project ideas, ask questions and collaborate. +- **Slack:** Please join us in our [slack workspace](https://json-schema.org/slack). All GSoC discussions are are hapenning in the [`#gsoc`](https://json-schema.slack.com/archives/C04MVQSRBRS) channel. + +Please see our [Code of Conduct](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md) + +## Getting Help + +Got a problem? Reach out to mentors or the community for assistance. Remember, mentors are listed, but other community members can also lend a hand. When talking to non-mentors: + +- Introduce yourself. +- Discuss tasks based on personal interest, not just the contest. +- Explain technical decisions independently. +- Consult mentors for guidance on task evaluation. + +## Contributing Guidelines + +Please, check-out the [GSoC Contributior guidelines](CONTRIBUTOR-GUIDANCE.md) diff --git a/programs/mentoring/gsoc/gsoc-2025.md b/programs/mentoring/gsoc/gsoc-2025.md new file mode 100644 index 00000000..3cf70dab --- /dev/null +++ b/programs/mentoring/gsoc/gsoc-2025.md @@ -0,0 +1,78 @@ + +![gsoc-banner](https://github.com/json-schema-org/community/assets/40007659/7d7d3f1d-6f4a-4139-98fb-96aa3354b777) + +# Welcome to Google Summer of Code 2025 with JSON Schema! + +We are thrilled to announce that JSON Schema will be applying as a mentoring organization for the 2025 Google Summer of Code (GSoC). If accepted, we look forward to collaborating with talented contributors from around the world to advance the field of JSON Schema and open-source technology. + +## Timeline and Project Ideas + +The official GSoC 2025 timeline is now live, and our project ideas are on the way! Stay tuned for updates and get ready to explore exciting opportunities to contribute to meaningful, real-world projects. + +[Full timeline](https://developers.google.com/open-source/gsoc/timeline) + +|Important dates | Deadline| +| ----- | ----- | +| ~~Organization Applications Open~~ | ~~January 27, 2025~~ | +| ~~Organization Application Deadline~~ | ~~February 11, 2025~~ | +| ~~Organizations Announced~~ | ~~February 27, 2025~~ | +| ~~Potential GSoC contributors discuss application ideas with mentoring organizations~~ | ~~February 27 - March 24, 2025~~ | +| ~~GSoC contributor application period~~ | ~~March 24 - April 8, 2025~~ | +| ~~Accepted GSoC Contributor projects announced~~ | ~~May 8, 2025~~ | +| Contributors work on their Google Summer of Code projects | June 2, 2025 - August 25, 2025| +| Mentors submit final GSoC contributor evaluations (standard coding period) | September 1, 2025 - September 8, 2025| +| Initial results of Google Summer of Code 2024 announced | September 3, 2025 | + +## [Project Ideas](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc) +Here is the list of our 2025 project ideas: +- [#874](https://github.com/json-schema-org/community/issues/874): **GSOC 2025 : Build a Java wrapper library for sourcemeta/blaze** +- [#870](https://github.com/json-schema-org/community/issues/870): **GSoC 2025: Better JSON Schema Errors** +- [#857](https://github.com/json-schema-org/community/issues/857): **GSoC 2025: Investigating Schema Normalization** +- [#856](https://github.com/json-schema-org/community/issues/856): **GSoC 2025: Comprehensive JSON Schema linting for encouraging best practices and catching anti-patterns early** +- [#872](https://github.com/json-schema-org/community/issues/872): **GSOC 2025 : Automated Badge Issuance System For Tour** +- [#859](https://github.com/json-schema-org/community/issues/859): **GSoC 2025: Adaption of component library in JSON Schema website** +- [#868](https://github.com/json-schema-org/community/issues/868): **GSOC 2025 : JSON Schema Visualization Tool - Interactive Graphical Viewer** + +## Why Choose a JSON Schema Project? + +JSON Schema is a widely adopted and powerful tool in the developer ecosystem. Some of the most active members today joined because of their participation in past GSoC editions, which is a clear evidence of how positive the experience has been for them. Our mentors have extensive mentoring experience, you will have the best support before, during and after the program. + +Contributing to a JSON Schema project offers: +- Real-World Impact: Your work will influence the global developer community. +- Skill Development: Gain hands-on experience with cutting-edge technology and improve your software development skills. +- Collaborative Learning: Work closely with experienced mentors and a welcoming community. +- Professional Growth: Build your network, receive guidance, and showcase your contributions at community events. +- Financial Support: Participants receive a stipend from Google for their contributions. + +## How to Apply +Details about our projects, qualification tasks, and application guidelines will be shared soon. In the meantime, prepare by: + +- Familiarizing yourself with JSON Schema. +- Engaging with the community via GitHub and Slack. +- Exploring past GSoC projects to understand the process. + +## Getting in Contact + +- **GitHub:** Please use [Issues](https://github.com/json-schema-org/community/issues?q=is%3Aopen+label%3Agsoc+sort%3Acreated-desc) to comment on project ideas, ask questions and collaborate. +- **Slack:** Please join us in our [slack workspace](https://json-schema.org/slack). All GSoC discussions are are hapenning in the [`#gsoc`](https://json-schema.slack.com/archives/C04MVQSRBRS) channel. + +Please see our [Code of Conduct](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md) + +## Getting Help + +Got a problem? Reach out to mentors or the community for assistance. Remember, mentors are listed, but other community members can also lend a hand. When talking to non-mentors: + +- Introduce yourself. +- Discuss tasks based on personal interest, not just the contest. +- Explain technical decisions independently. +- Consult mentors for guidance on task evaluation. + +## 🫢 How to get involved before GSoC? + +If you join our organization before GSoC, we invite you to join us contributing to JSON Schema as a great way to start engaging with the Team, learn about the JSON Schema specification and get to know some of our projects. + +Please check out our [Contribution guidelines](https://github.com/json-schema-org/.github/blob/main/CONTRIBUTING.md) to know more about how to contribute in each area. + +## πŸ— GSoC Contributor Guidance + +Please, check-out the [GSoC Contributior Guidance](CONTRIBUTOR-GUIDANCE.md) diff --git a/programs/newsletter/slack-weekly/weekly-blockit-template.json b/programs/newsletter/slack-weekly/weekly-blockit-template.json new file mode 100644 index 00000000..cc66f5fc --- /dev/null +++ b/programs/newsletter/slack-weekly/weekly-blockit-template.json @@ -0,0 +1,111 @@ +{ + "blocks": [ + { + "type": "header", + "text": { + "type": "plain_text", + "text": "The JSON Schema Weekly! #43", + "emoji": true + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": ":wave: Hi *JSON Schema* Community! This is a quick recap of the best stuff of the week:" + } + }, + { + "type": "divider" + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "πŸ“° *Community News*" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "" + } + }, + { + "type": "divider" + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "🌱 *Contributors Spotlight*" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Thanks @micshar1992 for tutorial for unnevaluatedItems to improve the JSON Schema docs!" + } + }, + { + "type": "divider" + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "πŸ’¬ *Community Discussions*" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "" + } + }, + { + "type": "divider" + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "πŸ—“ *Events*" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*Past events: * Watch on Youtube the recording of the last Community Meeting `2023-10-16` " + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*Upcoming events:* Join us next Monday `2023-10-23` for the next Open Community Working Meeting. | " + } + }, + { + "type": "divider" + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "We are actively looking for contributors! Please join #contribute to get involved." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Have a lovely weekend everyone! 🫢🫢🏽🫢🏾" + } + } + ] +} \ No newline at end of file diff --git a/programs/sponsors/sponsors.md b/programs/sponsors/sponsors.md new file mode 100644 index 00000000..5ec8cbe0 --- /dev/null +++ b/programs/sponsors/sponsors.md @@ -0,0 +1,92 @@ +--- +section: docs +title: Sponsors +--- +JSON Schema uses [OpenCollective](https://opencollective.com/json-schema) and [GitHub Sponsors](https://github.com/sponsors) to gather money. This money is used to cover project expenses in a transparent way ([See the OpenCollective documentation](https://opencollective.com/how-it-works)), and your donation will help to sustain and grow the Project. + +While donations can be made to both OpenCollective and GitHub Sponsors, the JSON Schema funds are fully managed in OpenCollective, therefore the donations received in GitHub Sponsors will be transferred to OpenCollective. + +Please go to our [OpenCollective page](https://opencollective.com/json-schema) or [GitHub Sponsors page](https://github.com/sponsors/json-schema-org) to become a backer or a sponsor. + + + +## Benefits of being an individual backer + +Individual backers donate $5 per month to the project, and get the following benefits: + +- Visibility on the GitHub main project page in the "sponsors" section. + +## Benefits of being a community sponsor + +Community sponsors is a special tier for companies under 20 employees. Community sponsors donate $20 per month to the project, and get the following benefits: + +- Visibility on the GitHub main project page in the "sponsors" section. +- "Thank you" tweet from [@jsonschema](https://twitter.com/jsonschema). +- "Thank you" post in Linkedin from [@jsonschema](https://www.linkedin.com/company/jsonschema). +- A dedicated slack channel in our organization. + +## Benefits of being a bronze sponsor + +Bronze sponsors donate $100 per month to the project, and get the following benefits: + +- Visibility on the front page of [https://json-schema.org](https://json-schema.org) in the "sponsors" section (about 110,000 views/month on November, 2023). +- Visibility on the GitHub main project page in the "sponsors" section. +- "Thank you" tweet from [@jsonschema](https://twitter.com/jsonschema). +- "Thank you" post in Linkedin from [@jsonschema](https://www.linkedin.com/company/jsonschema). + +## Benefits of being a silver sponsor + +There is a limit to 10 silver sponsors. + +Silver sponsors donate $500 per month to the project, and get the following benefits: + +- Same benefits as bronze sponsors. +- A mention on the Newsletter. +- Possibility of getting expert advice from the team. +- Get a Swag Kit. + +## Benefits of being a gold sponsor + +There is a limit to 3 gold sponsors. + +Gold sponsors donate $1,000 per month to the project, and get the following benefits: + +- Same benefits as silver sponsors. +- Company logo in the footer of the Newsletter. +- Company logo on all [https://json-schema.org](https://json-schema.org) page footers. + +## What will the project do with the money? + +As you can read in [the OpenCollective documentation](https://docs.opencollective.com), the way your money will be used will be public and totally transparent. + +Money will first be used to cover direct project costs: + +- [Infrastructure](https://github.com/json-schema-org/community/blob/main/INFRASTRUCTURE.md) and hosting +- New feature development +- Any administrative or legal costs + +Then, money will be used for: + +- Merchandising +- Mentoring and Contributing programs + +## Acceptance policy + +We don't accept sponsorship from the following types of companies: Adult websites, affiliate and review websites, fake news services, fake social media engagement services, casinos and gambling, insurance & financial products (credit), pharmacy products (weight loss, anti-aging), and essay writing services. + +Please, [contact us](mailto:info@json-schema.org) if you have further questions. + +

+ + +**References:** +- [JHipster - Sponsors](https://www.jhipster.tech/sponsors/) +- [MUI Code - Sponsors and Backers](https://mui.com/material-ui/discover-more/backers/) \ No newline at end of file diff --git a/programs/sponsors/templates/socialmedia-promotion.md b/programs/sponsors/templates/socialmedia-promotion.md new file mode 100644 index 00000000..3b43f4f8 --- /dev/null +++ b/programs/sponsors/templates/socialmedia-promotion.md @@ -0,0 +1,9 @@ +πŸ“£ New Sponsor Announcement πŸ“£ + +We’re thrilled to welcome onboard ....... as new bronze Sponsor!! + +LLC.org is a ......... + +Thanks so much for supporting us! + +Check-out our Open Collective to know more about our sponsorship opportunities πŸ‘‰ https://opencollective.com/json-schema \ No newline at end of file diff --git a/programs/sponsors/templates/welcome-email.md b/programs/sponsors/templates/welcome-email.md new file mode 100644 index 00000000..4f4ff8df --- /dev/null +++ b/programs/sponsors/templates/welcome-email.md @@ -0,0 +1,7 @@ +Dear Sponsor, + +Thank you sincerely for your generous contribution to JSON Schema. Your contribution enables us to continue working towards our mission of strengthen the JSON Schema ecosystem. + +We're excited about the journey ahead and look forward to keeping you updated on our progress. + +Best regards, \ No newline at end of file diff --git a/programs/triage-group/PR-Review-Process.md b/programs/triage-group/PR-Review-Process.md new file mode 100644 index 00000000..0b61af0e --- /dev/null +++ b/programs/triage-group/PR-Review-Process.md @@ -0,0 +1,104 @@ +# Pull Request (PR) Review Process + +Pull Requests (PRs) are a fundamental part of our development workflow. They enable collaboration, ensure code quality, and provide a structured mechanism for peer review. A well-defined PR review process not only improves the stability and readability of our codebase, but also encourages knowledge sharing and collective ownership among team members. + +This document serves as a guide for the entire PR lifecycle and review process, from creation to completion β€” by defining each status, outlining the responsibilities of the author and reviewers, and establishing best practices. Following this workflow will help ensure clarity, consistency, and efficiency across our engineering team. + +Use this guide as a reference to: +- Understand the meaning and purpose of each PR status +- Know what actions to take at every stage +- Communicate effectively during the review process +- Improve turnaround time and reduce merge conflicts + +Please note that we are using [this](https://github.com/orgs/json-schema-org/projects/41) project board, which implements the workflow described below. + +--- + +## πŸ”„ Types of PR Lifecycle Status + +### 1. 🟑 Unclear +- **Definition:** The PR is open but lacks critical information such as purpose, context, or a clear problem statement. Reviewers are uncertain about what is expected or whether the PR is ready for review. +- **Action:** The PR author must update the description, clarify the scope, link relevant issues or documentation, and ensure the PR is complete enough to be reviewed. +- **Owner:** PR Author + +--- + +### 2. 🟒 Ready to Review +- **Definition:** The PR is considered complete from the author’s side and is ready to be evaluated. It should be in a clean state with all relevant changes pushed. +- **Checklist:** + - All required code changes and commits are included. + - PR description is detailed and includes context, purpose, and any linked issues. + - CI/CD checks (tests, linters, etc.) have passed. +- **Action:** The author should notify assigned reviewers or tag relevant team members to begin the review process. +- **Owner:** PR Author + +--- + +### 3. πŸ§‘β€πŸ’» In Review Team +- **Definition:** The PR has been acknowledged by one or more reviewers, and it is actively under review. Feedback may be ongoing or final decisions may be pending. +- **Action:** Reviewers should assess the code quality, test coverage, and adherence to standards. Constructive feedback or approval should be provided in a timely manner. +- **Owner:** Reviewers + +--- + +### 4. πŸ” Changes Requested +- **Definition:** Reviewers have reviewed the PR and determined that changes are needed before approval. These could include code fixes, style improvements, performance optimizations, or documentation updates. +- **Action:** The PR author must address all comments and push the required changes. Once updates are made, the reviewers should be notified to re-review. +- **Owner:** PR Author + +--- + +### 5. ⏳ Waiting for Others to Review +- **Definition:** The PR has been reviewed once and approved, but is still pending review from additional team members. +- **Action:** Reviewers who have not yet reviewed should prioritize reviewing the PR to avoid blocking progress. +- **Owner:** Reviewers + +--- + +### 6. βœ… Ready to Merge +- **Definition:** All required reviews have been completed, changes have been accepted, and CI pipelines are passing. The PR is now eligible to be merged into the main codebase. +- **Action:** The maintainer or authorized team member should proceed with the merge, following the appropriate merge strategy (e.g., squash, rebase, or merge commit). +- **Owner:** Maintainer + +--- + +### 7. πŸ—ƒοΈ To Be Closed +- **Definition:** The PR is no longer relevant or necessary, either due to project direction changes, duplication, or better alternatives implemented elsewhere. +- **Action:** Leave a clear comment explaining the rationale for closing the PR. Then close it gracefully. +- **Owner:** PR Author or Maintainer + +--- + +### 8. 🏁 Done +- **Definition:** The PR has been successfully merged or intentionally closed. All related work is considered complete and requires no further action. +- **Action:** No action required. Follow-up tasks (if any) should be documented in related issues or project boards. +- **Owner:** System / Maintainer + +--- + +## πŸ“Š Summary Table + +| **Status** | **Definition** | **Owner** | **Action Required** | +|-----------------------------|---------------------------------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------| +| Unclear | PR lacks context or clarity. | PR Author | Add description, clarify intent, link issues. | +| Ready to Review | PR is complete and ready for review. | PR Author | Notify reviewers, ensure CI passes, add context. | +| In Review Team | Reviewers are actively reviewing the PR. | Reviewers | Review code, leave comments or approvals. | +| Changes Requested | Reviewers have asked for updates. | PR Author | Implement changes, respond to comments, push updates. | +| Waiting for Others to Review| PR is pending additional review(s). | Reviewers | Remaining reviewers should review and respond. | +| Ready to Merge | All approvals are in; the PR is good to go. | Maintainer | Merge the PR following branch strategy and CI validation. | +| To Be Closed | PR is no longer needed or valid. | Author / Maintainer | Close the PR with a comment explaining why. | +| Done | PR is merged or closed with no further actions required. | System | No further action needed. | + +## Flow Diagram +```mermaid +flowchart TD + A[Unclear] --> B[Ready to Review] + B --> C[In Review Team] + C --> D[Changes Requested] + D --> B + C --> E[Waiting for Others to Review] + E --> F[Ready to Merge] + F --> G[Done] + H[To be closed] --> G +``` + diff --git a/slack/channel-topics.json b/slack/channel-topics.json index 2d40c48f..b7220760 100644 --- a/slack/channel-topics.json +++ b/slack/channel-topics.json @@ -12,7 +12,7 @@ "github": "Github stream of activity. You probably want to switch notifications to mention only mode!", "hyper-schema": "Discussions and queries related to vocabulary for annotating JSON documents with hyperlinks.", "implementers": "Development of validation libraries and other software tools. Questions about using these tools, and general schema authoring issues should go to #general", - "adopters": "Discussions and queries related the JSON Schema Adopters and Case Studies" + "adopters": "Discussions and queries related the JSON Schema Adopters and Case Studies", "in-the-wild": "Share all and every use of JSON Schema you see in the wild. See https://json-schema.slack.com/archives/C020M2HR37G/p1620122275000700", "introductions": "Break the ice, introduce yourself to our amazing community, and connect with each other!", "jobs": "Post job openings related to JSON Schema or APIs.", diff --git a/slack/greeting b/slack/greeting index 33b55393..d9505660 100644 --- a/slack/greeting +++ b/slack/greeting @@ -10,7 +10,7 @@ This server includes the specification authors, many implementers, and a large n :mag: If you're looking for an implementation of JSON Schema, you should check out the [implementations page](https://json-schema.org/implementations). -:book: If you're looking to learn the basics of JSON Schema, do check out our [learning resources](https://json-schema.org/learn). +:book: If you're looking to learn the basics of JSON Schema, do check out our [docs and learning resources](https://json-schema.org/overview/what-is-jsonschema). :question: If you want to ask questions or discuss JSON Schema, the #general channel is the right place. diff --git a/slack/other channels b/slack/other channels index e9b1ec7f..70da685f 100644 --- a/slack/other channels +++ b/slack/other channels @@ -7,8 +7,10 @@ Here are some of our other channels and why you might want to join them: * #announcements - Announcements from the JSON Schema organisation * #community-announcements - To share updates about any JSON Schema related Project, Tool or Event -* #community-mgmt - Discussing the community itself, how it operates, and how we would like it to operate. -* #tsc-discussion - A public place for the Technical Steering Committee to discuss current activities. +* #community-mgmt - Discussing the community itself, how it operates, and how we would like it to operate +* #tsc-discussion - A public place for the Technical Steering Committee to discuss current activities + +* #adopters - For discussions and queries related the JSON Schema Adopters and Case Studies * #in-the-wild - Share references to observed uses of JSON Schemas in other applications or projects, and any JSON Schema related content * #stack-overflow - Automated feed of StackOverflow questions tagged with JSON Schema diff --git a/slack/readme.md b/slack/readme.md index bf977f7d..e62bd169 100644 --- a/slack/readme.md +++ b/slack/readme.md @@ -1,13 +1,13 @@ -This folder relates to Slack things. +This folder contains files used for Slack. -The things: +Contents: -`greeting`: A text file containing the greeting sent to users who join our Slack server. +`greeting`: A text file containing the welcome message sent to users who join our Slack server. -`other channels`: A text file containing info on some of our Slack server's channels. +`other channels`: A text file providing information about some of our Slack server's channels. -`greeting.slackworkflow`: A workflow exported from Slack for the greeting message. It can be imported should we somehow loose it. Given the format and specific token requirements, it doesn't make sense to maintain the greeting message in this file. Consider it a reference and backup. Maintain in the `greeting` text file and manually update Slack on change. +`greeting.slackworkflow`: A Slack workflow export of the greeting message. It can be re-imported if it's ever lost.Due to specific token and formatting requirements, it's not recommended to maintain the greeting message directly in this file.Consider this file a reference and backup. Use the greeting text file as the source of truth and manually update Slack whenever changes are made. -We could later manage this by creating our own Slack bot, but using Workflows will do for now. +In the future, we may consider building our own Slack bot, but using Slack Workflows is sufficient for now. -We needed to migrate from Greetbot because they are [shutting down](https://medium.com/greetbot-blog/after-5-million-hellos-its-time-to-say-goodbye-8b82e40b5701). \ No newline at end of file +We migrated from Greetbot because the service has been [shutting down](https://medium.com/greetbot-blog/after-5-million-hellos-its-time-to-say-goodbye-8b82e40b5701).