Skip to content

Commit

Permalink
Merge branch 'main' into web-release-3
Browse files Browse the repository at this point in the history
  • Loading branch information
benjagm authored Jul 24, 2024
2 parents dd3afee + aacf741 commit 69f2863
Show file tree
Hide file tree
Showing 23 changed files with 1,075 additions and 316 deletions.
60 changes: 60 additions & 0 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
## JSON Schema Website CI/CD Workflow Guidelines

### Overview

This document outlines the guidelines for contributing to and maintaining GitHub Actions workflows in the JSON Schema Website project. Adherence to these guidelines ensures consistency, efficiency, and ease of maintenance across our CI/CD processes.

### General Principles

- **Change Management**: Modifications to files in this directory are closely monitored. Changes will trigger unauthorized file changes workflow during pull request checks. Only make changes when explicitly advised by a project contributor or maintainer.
- **Documentation and Naming**: Use descriptive, self-explanatory names for workflows, jobs, and steps. Include clear comments within workflow files to explain complex configurations.

### YAML Workflow File Structure

Our YAML files are organized based on specific roles and event triggers. When creating or modifying workflows, ensure that:
- The file roles described below are strictly maintained.
- Job sequences within workflows are preserved using [GitHub Action job dependencies](https://docs.github.com/en/actions/using-workflows/using-jobs-in-a-workflow#defining-prerequisite-jobs).

### File Categorization

Organize workflow files based on their primary event trigger:

- **Issue Workflows**:
- [Issue Workflow](./issue.yml): Handles issue-related events such as opening, closing, or labeling issues.

- **Pull Request Workflows**:
- [CI Workflow](./ci.yml): Runs for all contributors on pull requests, performing code-quality checks, unauthorized file changes detection, and build processes.
- [PR Interaction Workflow](./pull-request-target.yml): Contains workflows specifically for first-time contributors, such as welcome messages.

### Exceptions to File Categorization

Separate files may be created for workflows that:

- Require unique `cron` schedules for periodic execution.
Examples:
- [Link Checker](./link-checker.yml): Periodically checks for broken links in the repository.
- [Mark stale issues and pull requests](./stale-issues-prs.yml): Automatically labels and closes stale issues and PRs.
- [Dependabot](../dependabot.yml): Keeps dependencies up-to-date.

- Need specific `paths` triggers, activating only when files in particular directories are modified.
Example:
- [New Implementation Commenter](./new-implementation.yml): Adds comments when new implementation files are added.

- Only work correctly if they have a dedicated file.
Examples:
- [Preview Deployment](./preview-deployment.yml): Deploys preview environments for pull requests.
- [Production Deployment](./production-deployment.yml): Handles production deployments.
- [CodeQL Code Scanning](./codeql.yml): Performs code security analysis.
- [Check PR Dependencies](./pr-dependencies.yml): Enforces dependencies between PRs based on opening comments.

### Workflow Maintenance

To ensure the efficiency and reliability of our workflows, follow these maintenance guidelines:

- **Regular Review**: Review and update workflows at least quarterly to incorporate new features or best practices.
- **Dependency Updates**: Keep workflow dependencies up-to-date by reviewing and applying Dependabot suggestions promptly.
- **Documentation**: Update workflow documentation immediately after any changes or modifications to keep it current.
- **Performance Monitoring**: Regularly check workflow run times and optimize where possible to reduce GitHub Actions usage.
- **Security Checks**: Ensure that workflows using secrets or accessing sensitive data are properly secured and follow least privilege principles.

These guidelines aim to maintain the integrity and efficiency of our CI/CD processes. Always consult with the team before making significant changes to any workflow.
12 changes: 6 additions & 6 deletions .github/workflows/pull-request.yml → .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name: PR Workflow
name: CI
on:
pull_request:
types: [opened, reopened, synchronize]

jobs:
linting_and_type-checking:
name: Linting, Formatting and Type checking
code-quality-checks:
name: Code Quality Checks
runs-on: ubuntu-latest
steps:
- name: Checkout repository
Expand Down Expand Up @@ -44,8 +44,8 @@ jobs:
- name: Type checking
run: yarn run typecheck

Check-Unauthorized-File-Changes:
name: Checks if no unauthorized files are changed
check-unauthorized-file-changes:
name: Check Unauthorized File Changes
if: ${{github.actor != 'dependabot[bot]'}}
runs-on: ubuntu-latest
steps:
Expand Down Expand Up @@ -94,8 +94,8 @@ jobs:
build:
name: Build check
needs: code-quality-checks
runs-on: ubuntu-latest
needs: linting_and_type-checking
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand Down
42 changes: 21 additions & 21 deletions .github/workflows/issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@ on:
types: ['opened']

jobs:
Issue-Labeler:
name: Adding Label to issue
runs-on: ubuntu-latest
steps:
- uses: Renato66/[email protected]
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
ignore-comments: true
default-labels: '["Status: Triage"]'
issue-labeler:
name: Adding Label to Issue
runs-on: ubuntu-latest
steps:
- name: Auto Label Issue
uses: Renato66/[email protected]
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
ignore-comments: true
default-labels: '["Status: Triage"]'

Issue-Greeting:
name: Greeting Message to User
runs-on: ubuntu-latest
steps:
- name: Greeting Message to User
uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: |
Welcome to the [JSON Schema](https://json-schema.org/) Community. We are so excited you are here! Thanks a lot for reporting your first issue!! 🎉🎉 Please make sure to take a look to our [contributors guide](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md) if you plan on opening a pull request.
For more details check out [README.md](https://github.com/json-schema-org/website?tab=readme-ov-file#-welcome-to-the-json-schema-website) file.
issue-greeting:
name: Greeting Message to User
runs-on: ubuntu-latest
steps:
- name: Send Greeting Message
uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: |
Welcome to the [JSON Schema](https://json-schema.org/) Community. We are so excited you are here! Thanks a lot for reporting your first issue!! 🎉🎉 Please make sure to take a look at our [contributors guide](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md) if you plan on opening a pull request.
For more details, check out the [README.md](https://github.com/json-schema-org/website?tab=readme-ov-file#-welcome-to-the-json-schema-website) file.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:

jobs:
linkChecker:
name: Check and Report Broken Links
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pull-request-target.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Pull Request Target Workflow
name: PR Interaction Workflow

on:
pull_request_target:
Expand Down
File renamed without changes.
59 changes: 59 additions & 0 deletions .github/workflows/sync-contributors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name : Sync Contributors Data

on:
schedule: # Run sunday at midnight every week
- cron: '0 0 * * 0'
workflow_dispatch:

jobs:
sync-contributors-data:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- 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: Fetch Contributors data
uses: actions/github-script@v7
env:
ORGS: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
with:
github-token: ${{ steps.get_workflow_token.outputs.token }}
script: |
const fs = require('fs');
let data = await github.paginate(github.rest.repos.listContributors, {
owner: process.env.ORGS,
repo: process.env.REPO,
per_page: 100,
headers: {
"X-GitHub-Api-Version": "2022-11-28",
},
});
// Filter the data to get only the required fields
data = data.map(({ login, id, avatar_url, html_url }) =>
({ login, id, avatar_url, html_url }));
// Store the data in a file
fs.writeFileSync('community.json', JSON.stringify(data, null, 2));
- name: Commit changes
env:
GITHUB_APP_TOKEN: ${{ steps.get_workflow_token.outputs.token }}
run: |
git config user.name "the-json-schema-bot[bot]"
git config user.email "the-json-schema-bot[bot]@users.noreply.github.com"
git add community.json
git diff --quiet && git diff --staged --quiet || (git commit -m "chore(community): update community.json" && git push "https://x-access-token:${GITHUB_APP_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" HEAD:${GITHUB_REF#refs/heads/})
100 changes: 100 additions & 0 deletions .github/workflows/sync-project-roadmap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name : Sync Project Roadmap Data

on:
schedule: # Run sundat at 00:05 every week
- cron: '5 0 * * 0'
workflow_dispatch:

jobs:
sync-roadmap-data:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- 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 }}

# fetch project data and store it in a file
- name: Fetch project data
env:
GH_TOKEN: ${{ steps.get_workflow_token.outputs.token }} # GitHub App token stored in secrets
PROJECT_ID: ${{vars.ROADMAP_PROJECT_ID}} # Project ID
run: |
gh api graphql -f query='
query($PROJECT_ID : ID!) {
node(id: $PROJECT_ID) {
... on ProjectV2 {
items(first: 20) {
nodes {
id
fieldValues(first: 8) {
nodes {
... on ProjectV2ItemFieldTextValue {
text
field {
... on ProjectV2FieldCommon {
name
}
}
}
... on ProjectV2ItemFieldDateValue {
date
field {
... on ProjectV2FieldCommon {
name
}
}
}
... on ProjectV2ItemFieldSingleSelectValue {
name
field {
... on ProjectV2FieldCommon {
name
}
}
}
}
}
content {
... on DraftIssue {
title
body
}
... on Issue {
title
assignees(first: 10) {
nodes {
login
}
}
}
... on PullRequest {
title
assignees(first: 10) {
nodes {
login
}
}
}
}
}
}
}
}
}' -f PROJECT_ID=$PROJECT_ID | jq '.data.node.items.nodes' > project_data.json
# commit updated project data
- name: Commit changes
env:
GITHUB_APP_TOKEN: ${{ steps.get_workflow_token.outputs.token }}
run: |
git config user.name "the-json-schema-bot[bot]"
git config user.email "the-json-schema-bot[bot]@users.noreply.github.com"
git add project_data.json
git diff --quiet && git diff --staged --quiet || (git commit -m "chore(project_data): update project_data.json" && git push "https://x-access-token:${GITHUB_APP_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" HEAD:${GITHUB_REF#refs/heads/})
Loading

0 comments on commit 69f2863

Please sign in to comment.