Skip to content

Latest commit

 

History

History
120 lines (82 loc) · 3.55 KB

File metadata and controls

120 lines (82 loc) · 3.55 KB

Contributing

Thank you for considering contributing to Symfony Reprise!

Symfony Reprise is an open source, community-driven project, and we are happy to receive contributions from the community.

Tip

It's a good idea to read Symfony's Contribution Guide first.

Reporting an issue

If you find a bug, have a feature request, or need help, please open an issue.

Please provide as much information as possible, and remember to follow our Code of Conduct to keep the project welcoming for everyone.

Contributing to the code

Forking the repository

To contribute to Symfony Reprise, you need to fork the symfony/reprise repository on GitHub.

# With GitHub CLI https://cli.github.com/
$ gh repo clone <USERNAME>/reprise reprise

# Using SSH
$ git clone git@github.com:<USERNAME>/reprise.git reprise
$ cd reprise
$ git remote add upstream git@github.com:symfony/reprise.git

Setting up the development environment

  • PHP 8.4 or higher
  • Composer
  • Node.js 22 or higher
  • pnpm 11.10 or higher
$ composer install
$ pnpm install

Important

This repository has a dual structure: a PHP Symfony bundle (symfony/reprise) at the root, and an npm package (@symfony/reprise) in assets/, managed together as a pnpm workspace. Most changes touch only one side, but some (like adding a new option) touch both.

Working with the PHP bundle

The PHP source lives in src/, tests in tests/. The bundle follows Symfony's PHP coding standards and the Backward Compatibility promise.

# Run the test suite
$ vendor/bin/phpunit

# Run static analysis
$ vendor/bin/phpstan analyse

# Fix coding standards
$ vendor/bin/php-cs-fixer fix

Working with the assets

The actual bundler plugin (the unplugin for Vite and Rsbuild) lives in assets/, written in TypeScript and built with tsdown. These commands run from the repository root:

# Build the plugin
$ pnpm build

# Watch and rebuild on change
$ pnpm dev

# Run the test suite
$ pnpm test

# Lint
$ pnpm lint

# Format (use `pnpm fmt:check` to only check, without writing)
$ pnpm fmt

For manual end-to-end verification against a real Symfony backend, use the playground/ app (a full Symfony 7 project that imports the plugin directly from assets/):

$ npm -C playground run vite:dev
$ npm -C playground run vite:build

$ npm -C playground run rsbuild:dev
$ npm -C playground run rsbuild:build

Commit messages

Commit messages follow the same [<Scope>] <Short description> convention used across Symfony UX and WebpackEncoreBundle, not Conventional Commits. The scope is PascalCase, the description is imperative mood with a capitalized first word and no trailing period. Combine scopes as [A][B] when a change spans several areas.

[Stimulus] Emit forward-slash local controller paths
[Docs] Frame Stimulus usage as the Encore experience
[CI] Cancel superseded runs with a concurrency group

Keeping your fork up to date

To reset your local main to match upstream:

$ git checkout main && \
  git fetch upstream && \
  git reset --hard upstream/main && \
  git push origin main

To rebase a feature branch on top of upstream/main:

$ git checkout my-feature-branch && \
  git rebase upstream/main && \
  git push -u origin my-feature-branch