From a5f1df55781122252e73e3a4134a1f3b55a16873 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 17 Nov 2025 15:40:12 +0000 Subject: [PATCH] Add use_repo_config parameter to automatically detect prettier configuration This addresses GitHub issue #41 by adding an optional `use_repo_config` parameter that allows the action to automatically detect and use the repository's prettier configuration files and .prettierignore. Changes: - Added `use_repo_config` input parameter (default: false for backward compatibility) - Implemented config file detection in entrypoint.sh for all prettier config formats - Automatically changes file pattern to current directory when using repo config - Provides helpful messages about found config files and warnings when none exist - Updated README with new parameter documentation and Example 5 Benefits: - Users no longer need to manually specify --config or --ignore-path - Eliminates confusion about whether config files are being used - Maintains backward compatibility (opt-in via parameter) - Supports all prettier configuration file formats Related: #41 --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ action.yml | 5 +++++ entrypoint.sh | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) diff --git a/README.md b/README.md index 9c10a67..19fdf60 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ A GitHub action for styling files with [prettier](https://prettier.io). | github_token | :x: | `${{ github.token }}` | The default [GITHUB_TOKEN](https://docs.github.com/en/actions/reference/authentication-in-a-workflow#about-the-github_token-secret) or a [Personal Access Token](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token) | | git_identity | :x: | `actions` | Set to `author` to use author's user as committer. This allows triggering [further workflow runs](https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#triggering-further-workflow-runs) | | allow_other_plugins | :x: | `false` | Allow other plugins to be installed (prevents the @prettier-XYZ regex check) | +| use_repo_config | :x: | `false` | Automatically use the repository's prettier configuration files (.prettierrc, prettier.config.js, etc.) and .prettierignore. When enabled, prettier will search for and use config files in your repository, eliminating the need to specify `--config` or `--ignore-path` manually. | > Note: using the same_commit option may lead to problems if other actions are relying on the commit being the same before and after the prettier action has ran. Keep this in mind. @@ -157,6 +158,49 @@ jobs: github_token: ${{ secrets.PERSONAL_GITHUB_TOKEN }} ``` +#### Example 5 (using repository prettier configuration) + +This example demonstrates the `use_repo_config` option, which automatically detects and uses your repository's prettier configuration files (`.prettierrc`, `prettier.config.js`, etc.) and `.prettierignore` file. + +```yaml +name: Continuous Integration + +on: + push: + branches: + - main + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Prettify code + uses: creyD/prettier_action@v4.6 + with: + # Automatically use repository's prettier config and .prettierignore + use_repo_config: true +``` + +With `use_repo_config: true`, the action will: +- Search for prettier configuration files in your repository (.prettierrc, prettier.config.js, package.json, etc.) +- Automatically use your .prettierignore file if present +- Apply prettier to all supported files in your repository +- Warn you if no configuration file is found (prettier will use defaults) + +You can still customize the file pattern if needed: + +```yaml +- name: Prettify code + uses: creyD/prettier_action@v4.6 + with: + use_repo_config: true + prettier_options: --write "src/**/*.{js,ts,jsx,tsx}" +``` + More documentation for writing a workflow can be found [here](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions). ## Issues diff --git a/action.yml b/action.yml index 541e8fb..089bb5b 100644 --- a/action.yml +++ b/action.yml @@ -77,6 +77,10 @@ inputs: description: Allow other plugins to be installed. By default, we are checking if the plugins are actually prettier plugins. required: false default: false + use_repo_config: + description: Use the repository's prettier configuration files (.prettierrc, prettier.config.js, etc.) and .prettierignore automatically. When enabled, prettier will search for config files in the repository. + required: false + default: false runs: using: "composite" @@ -106,6 +110,7 @@ runs: INPUT_CLEAN_NODE_FOLDER: ${{ inputs.clean_node_folder }} INPUT_GIT_IDENTITY: ${{ inputs.git_identity }} INPUT_ALLOW_OTHER_PLUGINS: ${{ inputs.allow_other_plugins }} + INPUT_USE_REPO_CONFIG: ${{ inputs.use_repo_config }} branding: icon: "award" diff --git a/entrypoint.sh b/entrypoint.sh index 56df3bd..36ffd4e 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -63,6 +63,46 @@ if [ -n "$INPUT_PRETTIER_PLUGINS" ]; then fi ) +# Handle repository configuration files +if [ "$INPUT_USE_REPO_CONFIG" = "true" ]; then + echo "Using repository prettier configuration..." + + # Check for prettier config files + CONFIG_FOUND=false + for config_file in .prettierrc .prettierrc.json .prettierrc.yml .prettierrc.yaml .prettierrc.js .prettierrc.cjs .prettierrc.mjs prettier.config.js prettier.config.cjs prettier.config.mjs .prettierrc.toml; do + if [ -f "$config_file" ]; then + echo " Found prettier config: $config_file" + CONFIG_FOUND=true + break + fi + done + + # Check package.json for prettier config + if [ -f "package.json" ] && grep -q '"prettier"' package.json; then + echo " Found prettier config in package.json" + CONFIG_FOUND=true + fi + + if [ "$CONFIG_FOUND" = "false" ]; then + echo " Warning: No prettier config file found. Prettier will use its default configuration." + fi + + # Check for .prettierignore + if [ -f ".prettierignore" ]; then + echo " Found .prettierignore file" + else + echo " Note: No .prettierignore file found. All files will be processed." + fi + + # When using repo config, if prettier_options is still the default, use a more sensible pattern + if [ "$INPUT_PRETTIER_OPTIONS" = "--write **/*.js" ]; then + echo " Using default file pattern: . (current directory)" + INPUT_PRETTIER_OPTIONS="--write ." + else + echo " Using custom prettier_options: $INPUT_PRETTIER_OPTIONS" + fi +fi + PRETTIER_RESULT=0 echo "Prettifying files..." echo "Files:"