Skip to content

culur/culur

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

495 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Culur Monorepo

CodeFactor Codecov Build and release

Welcome to the culur monorepo, a monorepo personally developed by @phamhongphuc (even though hosted under the culur organization). This project was born from the desire to promote reusability, consistency, and streamlined setup & updates across my various personal projects. It's meticulously managed using pnpm and Nx.

While primarily intended for my own use, you are welcome to utilize these packages or draw inspiration from this setup for your own projects. Please be mindful that updates can be frequent and may include breaking changes without extensive prior notice, as this is an actively evolving personal toolkit.

Beyond its direct utility, this repository serves as a practical demonstration of:

  • Monorepo Architecture & Core Workflow:

    • Setting up a robust monorepo with pnpm and Nx.
    • Fine-tuning Renovate for intelligent dependency grouping and optimized updates within a monorepo.
    • Customizing Changesets for rich, emoji-enhanced changelogs with clear structure (aided by self-developed @culur/changesets-* packages).
  • CI/CD and Automation with GitHub Actions:

    • Building reusable GitHub Actions, particularly for consistent environment setup across workflows.
    • Leveraging Volta to enforce pinned Node.js and pnpm versions.
    • Optimizing Nx build and task execution by utilizing GitHub Cache (as an effective alternative to Nx Cloud).
    • Automating Changeset creation for updates from Renovate PRs or during release preparation.
    • Orchestrating a seamless NPM package release pipeline.
  • Reusable Tooling Configurations (via @culur/config-* packages and best practices):

    • Establishing comprehensive linting with ESLint, Prettier, Stylelint, and Markdown Lint, tailored for monorepos with potential nested configurations and optimized for Nx's caching and task running.
    • Implementing shareable and minimally-adjusted configurations for tsup (bundling), tsconfig (TypeScript), Vite, and Vitest (testing) across different packages.
  • ...and many other patterns and examples embedded within this codebase.

While these approaches are personally trusted and have proven effective for my needs, they might not represent the absolute 'best practice' in every scenario. If you spot areas for improvement or have suggestions, please don't hesitate to share them in the Discussions!

📦 Packages

Explore the collection of packages developed within this monorepo, organized as follows:

⚙️ 1. Configs

Standardize your development environment with these readily-usable configurations for common linters and development tools.

Package Description NPM
config-eslint Sharing Eslint configurations. NPM Version NPM Download
config-prettier Sharing Prettier configurations. NPM Version NPM Download
config-stylelint Sharing Stylelint configurations. NPM Version NPM Download
config-tsup Sharing tsup configurations. NPM Version NPM Download
config-typescript Sharing tsconfig.json. NPM Version NPM Download
config-vite Sharing Vite/Vitest configurations. NPM Version NPM Download

🛠️ 2. Utilities and libraries

A collection of bespoke utility functions and focused libraries, crafted to solve specific development challenges or enhance common workflows.

Package Description NPM
logger Create beautiful CLI interfaces. NPM Version NPM Download
generate-zod An enhanced wrapper around ts-to-zod. NPM Version NPM Download
types Provides shared TypeScript types. NPM Version NPM Download
utils-packages Check if packages are installed or not. NPM Version NPM Download

📝 3. Utilities for customize changesets

This suite of packages is dedicated to customizing and enhancing the Changesets workflow, particularly for generating rich changelogs and integrating seamlessly with GitHub.

Package Description NPM
changesets-changelog-github A changelog entry generator for GitHub that links to commits, PRs, and users. NPM Version NPM Download
changesets-generate-dependencies-changesets Github action for generate dependencies changesets. Internal package
changesets-github-info Get the GitHub username and PR number from a commit. Intended for use with changesets. NPM Version NPM Download

📜 Changelog

Major changes and version history for the entire monorepo (managed by Changesets) can be found in the individual package CHANGELOG.md files. For a high-level overview of recent significant updates, refer to the GitHub Releases.

💬 Feedback & Issues

While this is a personal project and I may not have the capacity to review or merge feature-driven Pull Requests aimed at serving other users, I still appreciate feedback and bug reports.

If you'd like to implement a new feature based on your ideas, please consider forking this project and developing it in your own repository.

🔒 License

This monorepo and its packages are licensed under the MIT License. See the LICENSE file for more details.