Skip to content

SSWConsulting/SSW.Rules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,665 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SSW.Rules

Gitmoji Scheduled CodeAuditor test

This is a Next.js + TinaCMS website pulling data from:

Architecture Diagram

architecture diagram

Getting Started

Required Tools

  • Node.js (version defined in .nvmrc) – recommended to use nvm
  • corepack (run corepack enable to manage correct pnpm version)
  • pnpm package manager
  • python

F5 experience

  1. Clone this repo

  2. Clone SSW.Rules.Content

  3. Place both repos in the same parent directory e.g.

πŸ“ SSW-dev/
β”œβ”€β”€ πŸ“ SSW.Rules.Content/
└── πŸ“ SSW.Rules/ <--- This repo
  1. Create a .env file based off .env.example in the root of this repo - get the values from Keeper (SSW.Rules Environment Variables)

  2. Run pnpm install to install packages

  3. Install pyyaml python package: py -3 -m pip install pyyaml

  4. Run pnpm prepare:content to generate required mapping JSON files (they are gitignored)

  5. Run pnpm dev to start the development server

Syncing and Updating Content

To test changes to MDX rules:

  1. Go to your branch in SSW.Rules.Content

  2. Modify the rule MDX as needed

  3. If there are any changes to categories, re-run pnpm prepare:content

  4. Run pnpm dev in this project to start SSW.Rules locally

  5. Navigate to http://localhost:3000/rules/ to see your changes

Note: pnpm dev does not track changes in SSW.Rules.Content, therefore, you will need to re-run the command after you make changes

Branches

  • Always create a new branch for your PBIs
  • Always delete your branch once your PR has been merged
  • To create a new content branch (in SSW.Rules.Content), follow the setup steps in the Wiki

Builds & Deployment

Content Changes (SSW.Rules.Content)

Changes made in SSW.Rules.Content (e.g. rule MDX, categories, images) will go live after the PR is merged.

πŸŽ₯ Watch the video: TinaCMS for GitHub - The SSW Rules Migration | Jake Bayliss | SSW Consulting


Code Changes (SSW.Rules)

Code changes made to SSW.Rules are deployed as follows:


Python Scripts

In this Repository (Website)

  • build-rule-category-map.py
    Generates two JSON files:

    • rule-to-categories.json (maps rules to categories)
    • category-uri-title-map.json (maps category URIs to titles)
    • orphaned_rules.json (maps category URIs to titles)
      Reads rule data from the SSW.Rules.Content repo and runs during the build process (via GitHub Actions) or manually from scripts/tina-migration.
  • prepare-content.js
    A Node.js script that runs build-rule-category-map.py and moves the JSON files to the correct location for use by the website.
    Uses the LOCAL_CONTENT_RELATIVE_PATH environment variable to locate the content repo.

In the Content Repository

  • build-rule-category-map.py
    Similar logic to the version in PoC. It processes the categories/ folder and .mdx files to create the same JSON maps.

  • convert-rule-md-to-mdx.py
    Converts .md rule files to MDX format compatible with TinaCMS.
    Replaces custom markdown patterns (e.g., Figure, good/bad/ok boxes) with structured MDX components like <asideEmbed> and escapes special characters for valid formatting.

  • modify-sub-categories-frontmatter.py
    Updates frontmatter in sub-category files (excluding index.md) to ensure consistency.

  • modify-top-categories-frontmatter.py
    Targets index.md files in sub-category folders and updates frontmatter to match the expected format.

  • modify-main-category-frontmatter
    Updates index.md file at the root of the categories folder.


πŸ“ Public Content Folder

All rule content (including .mdx files and images) live into the public/ folder.

πŸŽ₯ The 3 options for storing markdown in GitHub for TinaCMS

public/
└── uploads/
    └── rules/
        β”œβ”€β”€ rule-a/
        β”‚   β”œβ”€β”€ rule.mdx
        β”‚   └── img.png
        └── rule-b/
            β”œβ”€β”€ rule.mdx
            └── img.png

πŸ“ Adding Editorial Workflow

We've integrated TinaCMS with an editorial workflow to support content editing in a more structured way. If you're unfamiliar with how editorial workflows work in Tina, please refer to the official documentation:

πŸ‘‰ TinaCMS Editorial Workflow Documentation

This workflow allows for content changes to be reviewed before being published, improving collaboration and content quality.

πŸ”– Bookmarks (via SSW.Rules.Functions)

The Bookmark feature uses the SSW.Rules.Functions API.

Local debugging setup

  1. Clone the SSW.Rules.Functions repository.
  2. In the repo root, create a local.settings.json file and copy the values from Keeper (environment variables for the Functions app).
  3. Start the Functions app in dev mode.

Local endpoint

  • By default, the API is available at: http://localhost:7248.

  • Bookmark data is persisted to the staging database.

  • Install nodejs version specified in .nvmrc (Ideally use nvm to use the right version)

  • Ensure corepack is enabled - corepack enable (this allows auto-install of the correct yarn version)

Getting ready for development

  • Clone the repo from https://github.com/SSWConsulting/SSW.Rules

  • Run yarn install to install packages

  • Create environment files .env.development based off .env.template - get the values from Keeper (SSW.Rules Environment Variables)

  • For GitHub App authentication, set the following environment variables:

    • GH_APP_ID: Your GitHub App ID
    • GH_APP_PRIVATE_KEY: Your GitHub App private key (PEM format, can be base64 encoded)
    • GITHUB_APP_INSTALLATION_ID: (Optional) The installation ID. If not provided, the first installation will be used.

    See GitHub App authentication documentation for more details.