Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Major Update 4.0 #48

Merged
merged 63 commits into from
Sep 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
e338a63
Tag entrypoint as a bash script
jsoref Feb 19, 2021
7326fa4
Switch to composite
jsoref Feb 19, 2021
45863b1
Merge pull request #38 from jsoref/composite
creyD Feb 19, 2021
8a68c5b
Experimenting with a simpler form of composite actions
creyD Feb 19, 2021
3aa6d76
Added testing variable
creyD Feb 19, 2021
5f9fa33
Fixed variable problem
creyD Feb 19, 2021
b5409d4
Removed global option for testing
creyD Feb 19, 2021
5c365ab
Another bugfix attempt trying to generate the global flag only if needed
creyD Feb 19, 2021
4d25f0b
Moving the path to the run part of the yml
creyD Feb 19, 2021
857bc25
Added missing bracket
creyD Feb 19, 2021
35d0d93
Removed global parameter
creyD Feb 19, 2021
01e9c56
Trying to exclude the useless package files
creyD Feb 19, 2021
3b82dd7
Fixed missing command
creyD Feb 19, 2021
c5dd364
Updating the ignore mechanism
creyD Feb 19, 2021
5564e3e
Updating ignore mechanism 2
creyD Feb 19, 2021
77af303
Bugfixing ignore mechanism
creyD Feb 19, 2021
9acb5d8
Still debugging ignoring
creyD Feb 19, 2021
172c413
Added .gitignore exclusion
creyD Feb 19, 2021
1a89f28
Added .gitignore to exclusion - for real
creyD Feb 19, 2021
f4e4fcd
Added .gitignore to exclusion - for real II
creyD Feb 19, 2021
c9d8181
Moved ignore part to before git checks changed
creyD Feb 19, 2021
19d31cb
Another try at bugfixing the ignore mechanism
creyD Feb 19, 2021
7d4939b
Another try at bugfixing the ignore mechanism
creyD Feb 19, 2021
5e56c64
Another try at bugfixing the ignore mechanism
creyD Feb 19, 2021
1f62e02
Added exceptions to improve stability
creyD Feb 19, 2021
b814968
Adjusted exception message and finalized changes
creyD Feb 19, 2021
a0331d2
Merge pull request #39 from creyD/dev_composite
creyD Feb 19, 2021
d48a703
Handle bash globs
jsoref Feb 19, 2021
e81db12
Allow unofficial plugins
suda Feb 28, 2021
6c3c102
Fix plugin name syntax in README & description
infotexture Feb 28, 2021
6438b32
Merge pull request #45 from infotexture/fix/plugin-syntax
creyD Mar 1, 2021
53d0f90
Update README.md
creyD Mar 1, 2021
bc1e95c
Adjusted the prettier_plugins variable to documentation
creyD Mar 1, 2021
87e1553
Merge pull request #40 from jsoref/glob
creyD Mar 1, 2021
b40e4ba
fix(issue-37): adds logic to handle prettier cmd output to shell dry-…
fsz-codeshop Mar 25, 2021
0e4ccc8
style: fixes log message
fsz-codeshop Mar 25, 2021
217be60
fix: removes code block added by mistake from dev branch
fsz-codeshop Mar 25, 2021
70f47fb
fix: fixes handling of bad case where there are unpretty files and co…
fsz-codeshop Mar 25, 2021
341259c
other: testing another approach to handle both cases
fsz-codeshop Mar 25, 2021
2602a7a
other: testing approach using pipefail
fsz-codeshop Mar 26, 2021
67234be
other: testing approach with multiple commands on fail
fsz-codeshop Mar 26, 2021
3d912f6
fix: added variable declaration
fsz-codeshop Mar 26, 2021
5b4a6a0
docs: note about using --check on options to help in dry running
fsz-codeshop Mar 26, 2021
2069f26
other: improves the log output by not having and out of range message
fsz-codeshop Mar 26, 2021
c2e2730
fix: fixes codefactor recommendation
fsz-codeshop Mar 26, 2021
fd9337d
Merge pull request #46 from fsz-codeshop/issue-37-dry-run-reporting-u…
creyD Apr 10, 2021
0b7e271
Merge branch 'dev' into master
creyD Apr 10, 2021
d9d644a
Merge pull request #44 from suda/master
creyD Apr 10, 2021
634a3d2
fix: changes the logic to handle dry-run with --write option and corr…
fsz-codeshop Apr 13, 2021
707db76
Add input git push options
stephenlacy May 20, 2021
bb9aa74
Merge pull request #53 from stevelacy/master
creyD May 21, 2021
426f319
Merge branch 'dev' into issue-37-dry-run-reporting-unpretty
creyD May 21, 2021
ba482bb
Merge pull request #49 from fsz-codeshop/issue-37-dry-run-reporting-u…
creyD May 21, 2021
4f31875
Add support to override the default github token
hpedrorodrigues Jun 16, 2021
654f901
Merge branch 'dev' into override-token
creyD Jun 16, 2021
a9bef1b
Merge pull request #56 from hpedrorodrigues/override-token
creyD Jun 16, 2021
aeab425
Adding missing environment variable INPUT_GITHUB_TOKEN
hpedrorodrigues Jun 22, 2021
c97500d
Checking if generated files exist before trying to delete them
hpedrorodrigues Jun 22, 2021
8002e35
Making variable INPUT_PUSH_OPTIONS not required
hpedrorodrigues Jun 22, 2021
6c9f8f1
Displaying prettier error when a glob doesn't match any files
hpedrorodrigues Jun 22, 2021
67f2a40
Added dry run example
creyD Sep 7, 2021
c392c4f
Merge pull request #57 from hpedrorodrigues/main
creyD Sep 7, 2021
9ff7c1d
Added new version
creyD Sep 7, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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/[email protected]
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/[email protected]
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 <[email protected]>" ${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