Skip to content

Commit

Permalink
Merge pull request #48 from creyD/dev
Browse files Browse the repository at this point in the history
Major Update 4.0
  • Loading branch information
creyD committed Sep 7, 2021
2 parents 7040c46 + 9ff7c1d commit 0b655e2
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 29 deletions.
4 changes: 0 additions & 4 deletions Dockerfile

This file was deleted.

72 changes: 64 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,17 @@ A GitHub action for styling files with [prettier](https://prettier.io).

| Parameter | Required | Default | Description |
| - | :-: | :-: | - |
| dry | :x: | `false` | Runs the action in dry mode. Files wont get changed and the action fails if there are unprettified files. |
| dry | :x: | `false` | Runs the action in dry mode. Files wont get changed and the action fails if there are unprettified files. Recommended to use with prettier_options --check |
| prettier_version | :x: | `false` | Specific prettier version (by default use latest) |
| prettier_options | :x: | `"--write **/*.js"` | Prettier options (by default it applies to the whole repository) |
| commit_options | :x: | - | Custom git commit options |
| push_options | :x: | - | Custom git push options |
| same_commit | :x: | `false` | Update the current commit instead of creating a new one, created by [Joren Broekema](https://github.com/jorenbroekema), this command works only with the checkout action set to fetch depth '0' (see example 2) |
| commit_message | :x: | `"Prettified Code!"` | Custom git commit message, will be ignored if used with `same_commit` |
| file_pattern | :x: | `*` | Custom git add file pattern, can't be used with only_changed! |
| prettier_plugins | :x: | ` ` | Install Prettier plugins, i.e. `@prettier/prettier-php @prettier/some-other-plugin` |
| prettier_plugins | :x: | - | Install Prettier plugins, i.e. `@prettier/plugin-php @prettier/plugin-other` |
| only_changed | :x: | `false` | Only prettify changed files, can't be used with file_pattern! This command works only with the checkout action set to fetch depth '0' (see example 2)|
| 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)

> 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.
Expand Down Expand Up @@ -53,12 +55,10 @@ jobs:
ref: ${{ github.head_ref }}

- name: Prettify code
uses: creyD/prettier_action@v3.3
uses: creyD/prettier_action@v4.0
with:
# This part is also where you can pass other options, for example:
prettier_options: --write **/*.{js,md}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
#### Example 2 (using the only_changed or same_commit option on PR)
Expand All @@ -83,13 +83,69 @@ jobs:
fetch-depth: 0

- name: Prettify code
uses: creyD/prettier_action@v3.3
uses: creyD/prettier_action@v4.0
with:
# This part is also where you can pass other options, for example:
prettier_options: --write **/*.{js,md}
only_changed: True
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
#### Example 3 (using a custom access token on PR)
```yaml
name: Continuous Integration

on:
pull_request:
branches: [master]

jobs:
prettier:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.head_ref }}
# Make sure the value of GITHUB_TOKEN will not be persisted in repo's config
persist-credentials: false

- name: Prettify code
uses: creyD/prettier_action@v4.0
with:
prettier_options: --write **/*.{js,md}
only_changed: True
# Set your custom token
github_token: ${{ secrets.PERSONAL_GITHUB_TOKEN }}
```
#### Example 4 (dry run)
```yaml
name: Continuous Integration

on:
pull_request:
branches: [master]

jobs:
prettier:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.head_ref }}
# Make sure the value of GITHUB_TOKEN will not be persisted in repo's config
persist-credentials: false

- name: Prettify code
uses: creyD/prettier_action@v4.0
with:
dry: True
github_token: ${{ secrets.PERSONAL_GITHUB_TOKEN }}
```
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).
Expand Down
40 changes: 32 additions & 8 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,25 @@ inputs:
commit_message:
description: Commit message, will be ignored if used with same_commit
required: false
default: 'Prettified Code!'
default: "Prettified Code!"
same_commit:
description: Update the current commit instead of creating a new one
required: false
default: false
commit_options:
description: Commit options
required: false
push_options:
description: Git push options
required: false
file_pattern:
description: File pattern used for `git add`, can't be used with only_changed!
required: false
default: '*'
default: "*"
prettier_options:
description: Options for the `prettier` command
required: false
default: '--write **/*.js'
default: "--write **/*.js"
dry:
description: Running the script in dry mode just shows whether there are files that should be prettified or not
required: false
Expand All @@ -36,14 +39,35 @@ inputs:
required: false
default: false
prettier_plugins:
description: Install Prettier plugins, i.e. `@prettier/prettier-php @prettier/some-other-plugin`
description: Install Prettier plugins, i.e. `@prettier/plugin-php @prettier/plugin-other`
required: false
default: ''
github_token:
description: GitHub Token or PAT token used to authenticate against a repository
required: false
default: ${{ github.token }}


runs:
using: 'docker'
image: 'Dockerfile'
using: "composite"
steps:
- name: Prettify code!
shell: bash
run: >-
PATH=$(cd $GITHUB_ACTION_PATH; npm bin):$PATH
${{ github.action_path }}/entrypoint.sh
env:
INPUT_COMMIT_MESSAGE: ${{ inputs.commit_message }}
INPUT_SAME_COMMIT: ${{ inputs.same_commit }}
INPUT_COMMIT_OPTIONS: ${{ inputs.commit_options }}
INPUT_FILE_PATTERN: ${{ inputs.file_pattern }}
INPUT_PRETTIER_OPTIONS: ${{ inputs.prettier_options }}
INPUT_DRY: ${{ inputs.dry }}
INPUT_PRETTIER_VERSION: ${{ inputs.prettier_version }}
INPUT_ONLY_CHANGED: ${{ inputs.only_changed }}
INPUT_PRETTIER_PLUGINS: ${{ inputs.prettier_plugins }}
INPUT_GITHUB_TOKEN: ${{ inputs.github_token }}

branding:
icon: 'award'
color: 'green'
icon: "award"
color: "green"
55 changes: 46 additions & 9 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
#!/bin/sh
#!/bin/bash
# e is for exiting the script automatically if a command fails, u is for exiting if a variable is not set
# x would be for showing the commands before they are executed
set -eu
shopt -s globstar

# FUNCTIONS
# Function for setting up git env in the docker container (copied from https://github.com/stefanzweifel/git-auto-commit-action/blob/master/entrypoint.sh)
_git_setup ( ) {
cat <<- EOF > $HOME/.netrc
machine github.com
login $GITHUB_ACTOR
password $GITHUB_TOKEN
password $INPUT_GITHUB_TOKEN
machine api.github.com
login $GITHUB_ACTOR
password $GITHUB_TOKEN
password $INPUT_GITHUB_TOKEN
EOF
chmod 600 $HOME/.netrc

Expand All @@ -25,14 +26,23 @@ _git_changed() {
[[ -n "$(git status -s)" ]]
}

_git_changes() {
git diff
}

(
# PROGRAM
# Changing to the directory
cd "$GITHUB_ACTION_PATH"

echo "Installing prettier..."

case $INPUT_PRETTIER_VERSION in
false)
npm install --silent --global prettier
npm install --silent prettier
;;
*)
npm install --silent --global prettier@$INPUT_PRETTIER_VERSION
npm install --silent prettier@$INPUT_PRETTIER_VERSION
;;
esac

Expand All @@ -48,15 +58,34 @@ if [ -n "$INPUT_PRETTIER_PLUGINS" ]; then
done
npm install --silent --global $INPUT_PRETTIER_PLUGINS
fi
)

echo "Prettifing files..."
PRETTIER_RESULT=0
echo "Prettifying files..."
echo "Files:"
prettier $INPUT_PRETTIER_OPTIONS || echo "Problem running prettier with $INPUT_PRETTIER_OPTIONS"
prettier $INPUT_PRETTIER_OPTIONS \
|| { PRETTIER_RESULT=$?; echo "Problem running prettier with $INPUT_PRETTIER_OPTIONS"; exit 1; }

# Ignore node modules and other action created files
if [ -d 'node_modules' ]; then
rm -r node_modules/
else
echo "No node_modules/ folder."
fi

if [ -f 'package-lock.json' ]; then
git reset --hard package-lock.json || rm package-lock.json
else
echo "No package-lock.json file."
fi

# To keep runtime good, just continue if something was changed
if _git_changed; then
# case when --write is used with dry-run so if something is unpretty there will always have _git_changed
if $INPUT_DRY; then
echo "Prettier found unpretty files!"
echo "Unpretty Files Changes:"
_git_changes
echo "Finishing dry-run. Exiting before committing."
exit 1
else
# Calling method to configure the git environemnt
Expand All @@ -81,10 +110,18 @@ if _git_changed; then
git push origin -f
else
git commit -m "$INPUT_COMMIT_MESSAGE" --author="$GITHUB_ACTOR <$GITHUB_ACTOR@users.noreply.github.com>" ${INPUT_COMMIT_OPTIONS:+"$INPUT_COMMIT_OPTIONS"} || echo "No files added to commit"
git push origin
git push origin ${INPUT_PUSH_OPTIONS:-}
fi
echo "Changes pushed successfully."
fi
else
# case when --check is used so there will never have something to commit but there are unpretty files
if [ "$PRETTIER_RESULT" -eq 1 ]; then
echo "Prettier found unpretty files!"
exit 1
else
echo "Finishing dry-run."
fi
echo "No unpretty files!"
echo "Nothing to commit. Exiting."
fi

0 comments on commit 0b655e2

Please sign in to comment.