Contributing to Embetty

Thank you for your interest in contributing to Embetty! We welcome contributions from the community.

Development Setup

Embetty is a monorepo managed with pnpm. To get started, you'll need Node.js and pnpm installed.

  1. Clone the repository:

    git clone https://github.com/heiseonline/embetty.git
    cd embetty

  2. Install dependencies: This command will install dependencies for all packages in the workspace and link them together.

    pnpm install

The workspace is defined in pnpm-workspace.yaml and includes packages in the libs/, tools/, embetty/, and embetty-server/ directories.

Common Scripts

You can run scripts from the root of the repository to affect all packages.

  • Build all packages:

    pnpm build

  • Run all tests:

    pnpm test

  • Lint all packages:

    pnpm lint

Commit Conventions

This project follows the Conventional Commits specification. This is enforced through commitlint.

When you commit, a husky hook will trigger commitlint to validate your commit message format. Please format your commit messages like this:

feat: add support for mastodon embeds

This commit introduces a new component, embetty-mastodon, and the corresponding server-side logic to fetch status data.

Common types include feat, fix, docs, style, refactor, test, chore, build.

Submitting Changes

  1. Create a new branch for your feature or bugfix.
  2. Make your changes and commit them following the commit conventions.
  3. Ensure all tests and lint checks pass (pnpm test and pnpm lint).
  4. Push your branch to your fork and open a pull request against the master branch.
  5. Please follow the guidelines in the PULL_REQUEST_TEMPLATE.md when describing your changes.

Versioning and Releasing

This project uses Changesets to manage versioning and releases. When you contribute a change that should be included in the changelog, you'll need to add a changeset file.

After making your changes, run:

pnpm changeset

This will prompt you to select which packages have been changed, the bump type (major, minor, or patch), and a description of the change. This information will be used to automatically update package versions and changelogs during the release process.