Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23abc3124a | ||
|
|
866d7e715c | ||
|
|
6f45501409 | ||
|
|
bf46251210 | ||
|
|
f8993157cb | ||
|
|
9cf67ec63b | ||
|
|
0f5c65e140 | ||
|
|
2046290e2b | ||
|
|
600bb6caa2 | ||
|
|
20912713da | ||
|
|
674c2318ce | ||
|
|
0b4686e3a6 | ||
|
|
1029512144 | ||
|
|
6c430d988e | ||
|
|
6f6bb2661a | ||
|
|
d1700b5653 | ||
|
|
1b5d710b24 | ||
|
|
3667febec5 | ||
|
|
8546b0c56b | ||
|
|
2c04f23922 | ||
|
|
b15488f0b3 | ||
|
|
612f1f7579 | ||
|
|
af7aac1007 | ||
|
|
6896bd8b80 | ||
|
|
ad558aa8bd | ||
|
|
5051105279 | ||
|
|
99a89f661a | ||
|
|
8cd820bd66 | ||
|
|
f633b0f6b5 | ||
|
|
a2712f7b92 | ||
|
|
09b03c0bb1 | ||
|
|
afee929f89 | ||
|
|
4b17904d54 | ||
|
|
ce4e3beff1 | ||
|
|
3874723ac6 | ||
|
|
f0c76f03b6 | ||
|
|
b7f7b0dddb | ||
|
|
14e12e8e74 | ||
|
|
f30118c78e | ||
|
|
0cb61e91a5 | ||
|
|
42a6cdde0c | ||
|
|
250469649c | ||
|
|
a5a8912d3e | ||
|
|
5980f05de8 | ||
|
|
106f76b593 | ||
|
|
8a36f3edfc | ||
|
|
220a06da5e | ||
|
|
e193524bff | ||
|
|
7e92312ae4 | ||
|
|
3d656402e5 | ||
|
|
6901b8e8fc | ||
|
|
932df18147 | ||
|
|
c935046a93 | ||
|
|
ed8dfeaf86 | ||
|
|
381bc0b884 | ||
|
|
3914720f25 | ||
|
|
f53ab0c2a5 | ||
|
|
6b76e36ab3 | ||
|
|
a4205cbdd8 | ||
|
|
d753ac9b7d | ||
|
|
488b74cc9f | ||
|
|
16d58bea33 | ||
|
|
a8941b89c6 | ||
|
|
0413b987d2 |
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@@ -21,6 +21,6 @@ updates:
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "dependencies:ci"
|
||||
- "CI/CD"
|
||||
commit-message:
|
||||
prefix: ci
|
||||
|
||||
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@@ -3,7 +3,7 @@ name: "Code Scanning"
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
||||
17
.github/workflows/dev-image.yml
vendored
17
.github/workflows/dev-image.yml
vendored
@@ -3,23 +3,22 @@ name: 'Dev Image CI'
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- '.github/workflows/dev-image.yml'
|
||||
- '.dockerignore'
|
||||
- '.nvmrc'
|
||||
- 'Dockerfile'
|
||||
- 'Makefile'
|
||||
- 'docker-compose.yml'
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
paths:
|
||||
- '.github/workflows/dev-image.yml'
|
||||
- '.dockerignore'
|
||||
- '.nvmrc'
|
||||
- 'Dockerfile'
|
||||
- 'Makefile'
|
||||
- 'docker-compose.yml'
|
||||
|
||||
jobs:
|
||||
skipci:
|
||||
@@ -34,10 +33,10 @@ jobs:
|
||||
- uses: actions/checkout@v2.3.1
|
||||
- name: Login to Packages
|
||||
run: echo '${{ secrets.GITHUB_TOKEN }}' | docker login 'docker.pkg.github.com' -u 'peaceiris' --password-stdin
|
||||
- run: make pull
|
||||
- run: docker-compose pull --quiet
|
||||
if: github.event_name == 'pull_request'
|
||||
- run: make build
|
||||
- run: make cirun cmd="npm ci"
|
||||
- run: make ciall
|
||||
- run: make push
|
||||
if: github.ref == 'refs/heads/master'
|
||||
- run: make ci
|
||||
- run: make all
|
||||
- run: docker-compose push
|
||||
if: github.ref == 'refs/heads/main'
|
||||
|
||||
22
.github/workflows/test.yml
vendored
22
.github/workflows/test.yml
vendored
@@ -3,7 +3,7 @@ name: 'Test'
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths-ignore:
|
||||
- '*.md'
|
||||
pull_request:
|
||||
@@ -34,7 +34,7 @@ jobs:
|
||||
id: nvm
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2.1.0
|
||||
uses: actions/setup-node@v2.1.1
|
||||
with:
|
||||
node-version: '${{ steps.nvm.outputs.NVMRC }}'
|
||||
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
name: coverage-${{ matrix.os }}
|
||||
path: coverage
|
||||
|
||||
- uses: codecov/codecov-action@v1.0.10
|
||||
- uses: codecov/codecov-action@v1.0.12
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
@@ -72,26 +72,26 @@ jobs:
|
||||
run: npm run build
|
||||
|
||||
- name: Remove lint-staged husky
|
||||
if: github.ref == 'refs/heads/master'
|
||||
if: github.ref == 'refs/heads/main'
|
||||
run: |
|
||||
npm uninstall lint-staged husky
|
||||
git checkout package-lock.json package.json
|
||||
|
||||
- name: Setup mdBook
|
||||
if: github.ref == 'refs/heads/master'
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: peaceiris/actions-mdbook@v1.1.12
|
||||
with:
|
||||
mdbook-version: '0.3.7'
|
||||
|
||||
- name: Build site
|
||||
if: github.ref == 'refs/heads/master'
|
||||
if: github.ref == 'refs/heads/main'
|
||||
working-directory: ./test_projects/mdbook
|
||||
run: mdbook build
|
||||
|
||||
- name: Deploy
|
||||
if: |
|
||||
startsWith(matrix.os, 'ubuntu-18.04') &&
|
||||
github.ref == 'refs/heads/master'
|
||||
github.ref == 'refs/heads/main'
|
||||
uses: ./
|
||||
with:
|
||||
# deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
@@ -110,7 +110,7 @@ jobs:
|
||||
- name: Deploy
|
||||
if: |
|
||||
startsWith(matrix.os, 'ubuntu-16.04') &&
|
||||
github.ref == 'refs/heads/master'
|
||||
github.ref == 'refs/heads/main'
|
||||
uses: ./
|
||||
with:
|
||||
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
@@ -128,7 +128,7 @@ jobs:
|
||||
- name: Deploy
|
||||
if: |
|
||||
startsWith(matrix.os, 'macos') &&
|
||||
github.ref == 'refs/heads/master'
|
||||
github.ref == 'refs/heads/main'
|
||||
uses: ./
|
||||
with:
|
||||
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
@@ -147,7 +147,7 @@ jobs:
|
||||
- name: Deploy
|
||||
if: |
|
||||
startsWith(matrix.os, 'windows') &&
|
||||
github.ref == 'refs/heads/master'
|
||||
github.ref == 'refs/heads/main'
|
||||
uses: ./
|
||||
with:
|
||||
# deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
@@ -166,7 +166,7 @@ jobs:
|
||||
- name: Deploy
|
||||
if: |
|
||||
startsWith(matrix.os, 'ubuntu-20.04') &&
|
||||
github.ref == 'refs/heads/master'
|
||||
github.ref == 'refs/heads/main'
|
||||
uses: ./
|
||||
with:
|
||||
# deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
|
||||
148
CHANGELOG.md
148
CHANGELOG.md
@@ -2,6 +2,154 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
# [3.7.0-6](https://github.com/peaceiris/actions-gh-pages/compare/v3.7.0-5...v3.7.0-6) (2020-07-25)
|
||||
|
||||
|
||||
### feat
|
||||
|
||||
* exclude_assets supports glob patterns (#417) ([6f45501](https://github.com/peaceiris/actions-gh-pages/commit/6f45501409dbe16857c00f6d40a51bea56254f2b)), closes [#417](https://github.com/peaceiris/actions-gh-pages/issues/417) [#163](https://github.com/peaceiris/actions-gh-pages/issues/163)
|
||||
|
||||
|
||||
|
||||
# [3.7.0-5](https://github.com/peaceiris/actions-gh-pages/compare/v3.7.0-4...v3.7.0-5) (2020-07-25)
|
||||
|
||||
|
||||
### feat
|
||||
|
||||
* Add exclude_assets option (#416) ([0f5c65e](https://github.com/peaceiris/actions-gh-pages/commit/0f5c65e1408b30fe461ba319ca9a01d20c293cd4)), closes [#416](https://github.com/peaceiris/actions-gh-pages/issues/416) [#163](https://github.com/peaceiris/actions-gh-pages/issues/163)
|
||||
|
||||
|
||||
|
||||
# [3.7.0-4](https://github.com/peaceiris/actions-gh-pages/compare/v3.7.0-3...v3.7.0-4) (2020-07-25)
|
||||
|
||||
|
||||
### fix
|
||||
|
||||
* copyAssets() for destination_dir (#414) ([674c231](https://github.com/peaceiris/actions-gh-pages/commit/674c2318cebb9ba59aa8fbf8ec4fae8482e51e5c)), closes [#414](https://github.com/peaceiris/actions-gh-pages/issues/414)
|
||||
|
||||
|
||||
|
||||
# [3.7.0-3](https://github.com/peaceiris/actions-gh-pages/compare/v3.7.0-2...v3.7.0-3) (2020-07-24)
|
||||
|
||||
|
||||
### deps
|
||||
|
||||
* bump @types/jest from 26.0.5 to 26.0.7 (#411) ([d1700b5](https://github.com/peaceiris/actions-gh-pages/commit/d1700b565361478232daa6d66d3fe7c146b9d08f)), closes [#411](https://github.com/peaceiris/actions-gh-pages/issues/411)
|
||||
* bump @types/node from 12.12.51 to 12.12.52 (#412) ([1b5d710](https://github.com/peaceiris/actions-gh-pages/commit/1b5d710b249d09c1e229931378217c47773de8ed)), closes [#412](https://github.com/peaceiris/actions-gh-pages/issues/412)
|
||||
|
||||
### fix
|
||||
|
||||
* set full path of publishing assets (#413) ([6f6bb26](https://github.com/peaceiris/actions-gh-pages/commit/6f6bb2661a12d5db5d7df62962d1d28403a02860)), closes [#413](https://github.com/peaceiris/actions-gh-pages/issues/413) [/github.com/peaceiris/actions-gh-pages/issues/410#issuecomment-663507581](https://github.com//github.com/peaceiris/actions-gh-pages/issues/410/issues/issuecomment-663507581)
|
||||
|
||||
### refactor
|
||||
|
||||
* change message type from warning to info ([3667feb](https://github.com/peaceiris/actions-gh-pages/commit/3667febec573a36efa26505b6a712b314242991a))
|
||||
|
||||
|
||||
|
||||
# [3.7.0-2](https://github.com/peaceiris/actions-gh-pages/compare/v3.7.0-1...v3.7.0-2) (2020-07-23)
|
||||
|
||||
|
||||
### ci
|
||||
|
||||
* Add docker-compose.yml (#406) ([a2712f7](https://github.com/peaceiris/actions-gh-pages/commit/a2712f7b923e3e05d0f46e54fbcacef3380aca31)), closes [#406](https://github.com/peaceiris/actions-gh-pages/issues/406)
|
||||
* bump actions/setup-node from v2.1.0 to v2.1.1 (#407) ([8cd820b](https://github.com/peaceiris/actions-gh-pages/commit/8cd820bd660be6aa016923b6b35005df2fb071da)), closes [#407](https://github.com/peaceiris/actions-gh-pages/issues/407)
|
||||
* bump codecov/codecov-action from v1.0.11 to v1.0.12 (#409) ([af7aac1](https://github.com/peaceiris/actions-gh-pages/commit/af7aac10073791e2907990204f723d6b0ff902c5)), closes [#409](https://github.com/peaceiris/actions-gh-pages/issues/409)
|
||||
* remove types [skip ci] ([f633b0f](https://github.com/peaceiris/actions-gh-pages/commit/f633b0f6b54f252348cc3b10713b111caaf6f3d1))
|
||||
|
||||
### docs
|
||||
|
||||
* Add Code Scanning workflow badge ([99a89f6](https://github.com/peaceiris/actions-gh-pages/commit/99a89f661a291c444965018bf828995e08d7bb7b))
|
||||
* bump hugo from 0.71.1 to 0.74.2 ([ad558aa](https://github.com/peaceiris/actions-gh-pages/commit/ad558aa8bd9ad82edc7bd886159659328e6d61de))
|
||||
* change default-branch to main ([6896bd8](https://github.com/peaceiris/actions-gh-pages/commit/6896bd8b80ecc02e6c47bbcf7fc1ae0bd4d47645))
|
||||
* change master branch to default-branch (#408) ([5051105](https://github.com/peaceiris/actions-gh-pages/commit/505110527986e8c3d30694488f643d6529d0d593)), closes [#408](https://github.com/peaceiris/actions-gh-pages/issues/408)
|
||||
|
||||
### fix
|
||||
|
||||
* chdir to workDir after copied assets ([612f1f7](https://github.com/peaceiris/actions-gh-pages/commit/612f1f7579820dc380d265d61924f7a7d8718859)), closes [#324](https://github.com/peaceiris/actions-gh-pages/issues/324)
|
||||
|
||||
|
||||
|
||||
# [3.7.0-1](https://github.com/peaceiris/actions-gh-pages/compare/v3.7.0-0...v3.7.0-1) (2020-07-21)
|
||||
|
||||
|
||||
### docs
|
||||
|
||||
* Enhance section name ([3874723](https://github.com/peaceiris/actions-gh-pages/commit/3874723ac6158d13e3f1e3c8fd34e1ce96d9edf7))
|
||||
|
||||
### fix
|
||||
|
||||
* KeepFiles behaviour when DestinationDir has dir (#405) ([ce4e3be](https://github.com/peaceiris/actions-gh-pages/commit/ce4e3beff1ed33658f3160b0f45b688c6ea09932)), closes [#405](https://github.com/peaceiris/actions-gh-pages/issues/405) [#324](https://github.com/peaceiris/actions-gh-pages/issues/324)
|
||||
|
||||
|
||||
|
||||
# [3.7.0-0](https://github.com/peaceiris/actions-gh-pages/compare/v3.6.4...v3.7.0-0) (2020-07-21)
|
||||
|
||||
|
||||
### ci
|
||||
|
||||
* bump codecov/codecov-action from v1.0.10 to v1.0.11 (#401) ([a5a8912](https://github.com/peaceiris/actions-gh-pages/commit/a5a8912d3e47a3ba8785d356ebed0fd02e2eeb46)), closes [#401](https://github.com/peaceiris/actions-gh-pages/issues/401)
|
||||
* update label ([5980f05](https://github.com/peaceiris/actions-gh-pages/commit/5980f05de835c05638459c3c7a80d76edd0c7969))
|
||||
|
||||
### deps
|
||||
|
||||
* bump @types/jest from 26.0.4 to 26.0.5 (#402) ([42a6cdd](https://github.com/peaceiris/actions-gh-pages/commit/42a6cdde0c0d499af05cd22020132f6240d578a8)), closes [#402](https://github.com/peaceiris/actions-gh-pages/issues/402)
|
||||
* bump @types/node from 12.12.50 to 12.12.51 (#404) ([0cb61e9](https://github.com/peaceiris/actions-gh-pages/commit/0cb61e91a5487c04cb202e13a8d2bc25c09c80e1)), closes [#404](https://github.com/peaceiris/actions-gh-pages/issues/404)
|
||||
|
||||
### docs
|
||||
|
||||
* update dependabot label ([2504696](https://github.com/peaceiris/actions-gh-pages/commit/250469649c036a88f547b96f94867900a1f19163))
|
||||
|
||||
### feat
|
||||
|
||||
* Add destination_dir option (#403) ([f30118c](https://github.com/peaceiris/actions-gh-pages/commit/f30118c78eebbbe6cf66009b80a7414a4047de43)), closes [#403](https://github.com/peaceiris/actions-gh-pages/issues/403) [#324](https://github.com/peaceiris/actions-gh-pages/issues/324) [#390](https://github.com/peaceiris/actions-gh-pages/issues/390)
|
||||
|
||||
|
||||
|
||||
## [3.6.4](https://github.com/peaceiris/actions-gh-pages/compare/v3.6.3...v3.6.4) (2020-07-18)
|
||||
|
||||
|
||||
### chore
|
||||
|
||||
* change default branch from master to main (#396) ([932df18](https://github.com/peaceiris/actions-gh-pages/commit/932df18147b59ce4a998b4caabfcc50f1889c827)), closes [#396](https://github.com/peaceiris/actions-gh-pages/issues/396)
|
||||
|
||||
### deps
|
||||
|
||||
* bump standard-version from 8.0.1 to 8.0.2 (#395) ([c935046](https://github.com/peaceiris/actions-gh-pages/commit/c935046a93788ca4ea55bb13f438ae77a54a9197)), closes [#395](https://github.com/peaceiris/actions-gh-pages/issues/395)
|
||||
* bump typescript from 3.9.6 to 3.9.7 (#399) ([7e92312](https://github.com/peaceiris/actions-gh-pages/commit/7e92312ae46d6a7ad1c55a6ce3d98c66ae1ddda3)), closes [#399](https://github.com/peaceiris/actions-gh-pages/issues/399)
|
||||
|
||||
### docs
|
||||
|
||||
* change default branch from master to main (#397) ([6901b8e](https://github.com/peaceiris/actions-gh-pages/commit/6901b8e8fcec69a339c4a622b85ec3f66e78f90a)), closes [#397](https://github.com/peaceiris/actions-gh-pages/issues/397)
|
||||
|
||||
### feat
|
||||
|
||||
* Allow absolute path for publish_dir (#400) ([e193524](https://github.com/peaceiris/actions-gh-pages/commit/e193524bff3509becae7e3ced3114176cc70a5dd)), closes [#400](https://github.com/peaceiris/actions-gh-pages/issues/400) [#242](https://github.com/peaceiris/actions-gh-pages/issues/242)
|
||||
* enhance error message (#398) ([3d65640](https://github.com/peaceiris/actions-gh-pages/commit/3d656402e52a96a0c027e4ad98f3ce06da7f8c1b)), closes [#398](https://github.com/peaceiris/actions-gh-pages/issues/398)
|
||||
|
||||
|
||||
|
||||
## [3.6.3](https://github.com/peaceiris/actions-gh-pages/compare/v3.6.2...v3.6.3) (2020-07-14)
|
||||
|
||||
|
||||
### deps
|
||||
|
||||
* bump @types/node from 12.12.48 to 12.12.50 (#392) ([a4205cb](https://github.com/peaceiris/actions-gh-pages/commit/a4205cbdd8cd3a11aee9c47b7f9d99a615b70a21)), closes [#392](https://github.com/peaceiris/actions-gh-pages/issues/392)
|
||||
* bump standard-version from 8.0.0 to 8.0.1 (#391) ([6b76e36](https://github.com/peaceiris/actions-gh-pages/commit/6b76e36ab31b40e721fdf587221239d94ca5d141)), closes [#391](https://github.com/peaceiris/actions-gh-pages/issues/391)
|
||||
|
||||
### docs
|
||||
|
||||
* Add dependabot.yml example (#385) ([a8941b8](https://github.com/peaceiris/actions-gh-pages/commit/a8941b89c6f5476753fcdadcacbfb73206faefb3)), closes [#385](https://github.com/peaceiris/actions-gh-pages/issues/385)
|
||||
* add notes #349 (#387) ([488b74c](https://github.com/peaceiris/actions-gh-pages/commit/488b74cc9f861adb4649850096fb9f367363c096)), closes [#349](https://github.com/peaceiris/actions-gh-pages/issues/349) [#387](https://github.com/peaceiris/actions-gh-pages/issues/387)
|
||||
* Add Schedule and Manual Deployment (#386) ([16d58be](https://github.com/peaceiris/actions-gh-pages/commit/16d58bea333f07b6141ab6d6f95dca541fde8853)), closes [#386](https://github.com/peaceiris/actions-gh-pages/issues/386)
|
||||
* pin actions/setup-node from v2 to v2.1.0 (#389) ([d753ac9](https://github.com/peaceiris/actions-gh-pages/commit/d753ac9b7dd593b0877d35bc997ea8665c73866c)), closes [#389](https://github.com/peaceiris/actions-gh-pages/issues/389) [#388](https://github.com/peaceiris/actions-gh-pages/issues/388)
|
||||
|
||||
### fix
|
||||
|
||||
* isProhibitedBranch detection (#394) ([f53ab0c](https://github.com/peaceiris/actions-gh-pages/commit/f53ab0c2a5d3f3b2e6524639bae8ca84e454e049)), closes [#394](https://github.com/peaceiris/actions-gh-pages/issues/394)
|
||||
|
||||
|
||||
|
||||
## [3.6.2](https://github.com/peaceiris/actions-gh-pages/compare/v3.6.1...v3.6.2) (2020-07-08)
|
||||
|
||||
|
||||
|
||||
38
Makefile
38
Makefile
@@ -1,46 +1,22 @@
|
||||
cmd := "bash"
|
||||
msg := ""
|
||||
IMAGE_NAME := docker.pkg.github.com/peaceiris/actions-gh-pages/dev:latest
|
||||
NODE_VERSION := $(shell cat ./.nvmrc)
|
||||
DOCKER_RUN := docker run --rm -i -t -v ${PWD}:/repo -v ~/.gitconfig:/root/.gitconfig $(IMAGE_NAME)
|
||||
DOCKER_RUN_CI := docker run --rm -v ${PWD}:/repo $(IMAGE_NAME)
|
||||
|
||||
|
||||
.PHONY: build
|
||||
build:
|
||||
docker build . \
|
||||
--build-arg NODE_VERSION=$(NODE_VERSION) \
|
||||
--cache-from=${IMAGE_NAME} \
|
||||
-t $(IMAGE_NAME)
|
||||
|
||||
.PHONY: pull
|
||||
pull:
|
||||
docker pull ${IMAGE_NAME}
|
||||
|
||||
.PHONY: push
|
||||
push:
|
||||
docker push ${IMAGE_NAME}
|
||||
docker-compose build --build-arg NODE_VERSION=$(NODE_VERSION)
|
||||
|
||||
.PHONY: run
|
||||
run:
|
||||
$(DOCKER_RUN) $(cmd)
|
||||
docker-compose run --rm dev bash
|
||||
|
||||
.PHONY: cirun
|
||||
cirun:
|
||||
$(DOCKER_RUN_CI) $(cmd)
|
||||
.PHONY: ci
|
||||
ci:
|
||||
docker-compose run --rm -T dev npm ci
|
||||
|
||||
.PHONY: test
|
||||
test:
|
||||
$(DOCKER_RUN) npm test
|
||||
|
||||
.PHONY: commit
|
||||
commit:
|
||||
$(DOCKER_RUN) git commit -m "$(msg)"
|
||||
docker-compose run --rm -T dev npm test
|
||||
|
||||
.PHONY: all
|
||||
all:
|
||||
$(DOCKER_RUN) npm run all
|
||||
|
||||
.PHONY: ciall
|
||||
ciall:
|
||||
$(DOCKER_RUN_CI) npm run all
|
||||
docker-compose run --rm -T dev npm run all
|
||||
|
||||
168
README.md
168
README.md
@@ -1,7 +1,8 @@
|
||||
[](https://github.com/peaceiris/actions-gh-pages/blob/master/LICENSE)
|
||||
[](https://github.com/peaceiris/actions-gh-pages/blob/main/LICENSE)
|
||||
[](https://github.com/peaceiris/actions-gh-pages/releases/latest)
|
||||
[](https://github.com/peaceiris/actions-gh-pages/releases)
|
||||

|
||||

|
||||

|
||||
[](https://www.codefactor.io/repository/github/peaceiris/actions-gh-pages)
|
||||
|
||||
<img width="400" alt="GitHub Actions for deploying to GitHub Pages with Static Site Generators" src="./images/ogp.svg">
|
||||
@@ -36,7 +37,12 @@ Three tokens are supported.
|
||||
| `deploy_key` | ✅️ | ✅️ | SSH | Necessary |
|
||||
| `personal_token` | ✅️ | ✅️ | HTTPS | Necessary |
|
||||
|
||||
Notes: Actually, the `GITHUB_TOKEN` works for deploying to GitHub Pages but it has still some limitations. For the first deployment, we need to select the `gh-pages` branch or `master` branch on the repository settings tab. See [First Deployment with `GITHUB_TOKEN`](#%EF%B8%8F-first-deployment-with-github_token)
|
||||
Notes: Actually, the `GITHUB_TOKEN` works for deploying to GitHub Pages but it has still some limitations.
|
||||
For the first deployment, we need to select the `gh-pages` branch or `master` branch on the repository settings tab.
|
||||
See [First Deployment with `GITHUB_TOKEN`](#%EF%B8%8F-first-deployment-with-github_token)
|
||||
|
||||
And you may need to push manually for the first deployment on a private repository.
|
||||
See [Issue #349](https://github.com/peaceiris/actions-gh-pages/issues/349)
|
||||
|
||||
### Supported Platforms
|
||||
|
||||
@@ -64,17 +70,18 @@ All Actions runners: Linux (Ubuntu), macOS, and Windows are supported.
|
||||
- [⭐️ Repository type - Project](#%EF%B8%8F-repository-type---project)
|
||||
- [⭐️ Repository type - User and Organization](#%EF%B8%8F-repository-type---user-and-organization)
|
||||
- [Options](#options)
|
||||
- [⭐️ `github_token`](#%EF%B8%8F-github_token)
|
||||
- [⭐️ `deploy_key`](#%EF%B8%8F-deploy_key)
|
||||
- [⭐️ `personal_token`](#%EF%B8%8F-personal_token)
|
||||
- [⭐️ `publish_branch`](#%EF%B8%8F-publish_branch)
|
||||
- [⭐️ `publish_dir`](#%EF%B8%8F-publish_dir)
|
||||
- [⭐️ CNAME](#%EF%B8%8F-cname)
|
||||
- [⭐️ Enable Built-in Jekyll](#%EF%B8%8F-enable-built-in-jekyll)
|
||||
- [⭐️ Allow empty commits](#%EF%B8%8F-allow-empty-commits)
|
||||
- [⭐️ Keeping existing files](#%EF%B8%8F-keeping-existing-files)
|
||||
- [⭐️ Deploy to external repository](#%EF%B8%8F-deploy-to-external-repository)
|
||||
- [⭐️ Force orphan](#%EF%B8%8F-force-orphan)
|
||||
- [⭐️ Set Runner's Access Token `github_token`](#%EF%B8%8F-set-runners-access-token-github_token)
|
||||
- [⭐️ Set SSH Private Key `deploy_key`](#%EF%B8%8F-set-ssh-private-key-deploy_key)
|
||||
- [⭐️ Set Personal Access Token `personal_token`](#%EF%B8%8F-set-personal-access-token-personal_token)
|
||||
- [⭐️ Target Branch `publish_branch`](#%EF%B8%8F-target-branch-publish_branch)
|
||||
- [⭐️ Source Directory `publish_dir`](#%EF%B8%8F-source-directory-publish_dir)
|
||||
- [⭐️ Deploy to Subdirectory `destination_dir`](#%EF%B8%8F-deploy-to-subdirectory-destination_dir)
|
||||
- [⭐️ Add CNAME file `cname`](#%EF%B8%8F-add-cname-file-cname)
|
||||
- [⭐️ Enable Built-in Jekyll `enable_jekyll`](#%EF%B8%8F-enable-built-in-jekyll-enable_jekyll)
|
||||
- [⭐️ Allow empty commits `allow_empty_commit`](#%EF%B8%8F-allow-empty-commits-allow_empty_commit)
|
||||
- [⭐️ Keeping existing files `keep_files`](#%EF%B8%8F-keeping-existing-files-keep_files)
|
||||
- [⭐️ Deploy to external repository `external_repository`](#%EF%B8%8F-deploy-to-external-repository-external_repository)
|
||||
- [⭐️ Force orphan `force_orphan`](#%EF%B8%8F-force-orphan-force_orphan)
|
||||
- [⭐️ Set Git username and email](#%EF%B8%8F-set-git-username-and-email)
|
||||
- [⭐️ Set custom commit message](#%EF%B8%8F-set-custom-commit-message)
|
||||
- [⭐️ Create Git tag](#%EF%B8%8F-create-git-tag)
|
||||
@@ -82,6 +89,7 @@ All Actions runners: Linux (Ubuntu), macOS, and Windows are supported.
|
||||
- [⭐️ Create SSH Deploy Key](#%EF%B8%8F-create-ssh-deploy-key)
|
||||
- [⭐️ First Deployment with `GITHUB_TOKEN`](#%EF%B8%8F-first-deployment-with-github_token)
|
||||
- [⭐️ Use the latest and specific release](#%EF%B8%8F-use-the-latest-and-specific-release)
|
||||
- [⭐️ Schedule and Manual Deployment](#%EF%B8%8F-schedule-and-manual-deployment)
|
||||
- [Examples](#examples)
|
||||
- [⭐️ Static Site Generators with Node.js](#%EF%B8%8F-static-site-generators-with-nodejs)
|
||||
- [⭐️ Gatsby](#%EF%B8%8F-gatsby)
|
||||
@@ -105,7 +113,7 @@ All Actions runners: Linux (Ubuntu), macOS, and Windows are supported.
|
||||
|
||||
### ⭐️ Repository type - Project
|
||||
|
||||
Add your workflow file `.github/workflows/gh-pages.yml` and push to the remote master branch.
|
||||
Add your workflow file `.github/workflows/gh-pages.yml` and push to the remote default branch branch.
|
||||
|
||||
An example workflow for Hugo.
|
||||
|
||||
@@ -119,7 +127,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -133,7 +141,7 @@ jobs:
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: '0.71.1'
|
||||
hugo-version: '0.74.2'
|
||||
|
||||
- name: Build
|
||||
run: hugo --minify
|
||||
@@ -194,7 +202,7 @@ jobs:
|
||||
|
||||
## Options
|
||||
|
||||
### ⭐️ `github_token`
|
||||
### ⭐️ Set Runner's Access Token `github_token`
|
||||
|
||||
**This option is for `GITHUB_TOKEN`, not a personal access token.**
|
||||
|
||||
@@ -210,7 +218,7 @@ GitHub Actions runner automatically creates a `GITHUB_TOKEN` secret to use in yo
|
||||
|
||||
For more details about `GITHUB_TOKEN`: [Authenticating with the GITHUB_TOKEN - GitHub Help](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token)
|
||||
|
||||
### ⭐️ `deploy_key`
|
||||
### ⭐️ Set SSH Private Key `deploy_key`
|
||||
|
||||
Read [Create SSH Deploy Key](#%EF%B8%8F-create-ssh-deploy-key), create your SSH deploy key, and set the `deploy_key` option like the following.
|
||||
|
||||
@@ -222,11 +230,10 @@ Read [Create SSH Deploy Key](#%EF%B8%8F-create-ssh-deploy-key), create your SSH
|
||||
publish_dir: ./public
|
||||
```
|
||||
|
||||
### ⭐️ `personal_token`
|
||||
### ⭐️ Set Personal Access Token `personal_token`
|
||||
|
||||
[Generate a personal access token (`repo`)](https://github.com/settings/tokens) and add it to Secrets as `PERSONAL_TOKEN`, it works as well as `ACTIONS_DEPLOY_KEY`.
|
||||
|
||||
|
||||
```yaml
|
||||
- name: Deploy
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
@@ -235,7 +242,7 @@ Read [Create SSH Deploy Key](#%EF%B8%8F-create-ssh-deploy-key), create your SSH
|
||||
publish_dir: ./public
|
||||
```
|
||||
|
||||
### ⭐️ `publish_branch`
|
||||
### ⭐️ Target Branch `publish_branch`
|
||||
|
||||
A target branch to deploy to GitHub Pages. The default is `gh-pages`.
|
||||
|
||||
@@ -247,9 +254,9 @@ A target branch to deploy to GitHub Pages. The default is `gh-pages`.
|
||||
publish_branch: master # default: gh-pages
|
||||
```
|
||||
|
||||
### ⭐️ `publish_dir`
|
||||
### ⭐️ Source Directory `publish_dir`
|
||||
|
||||
A target directory to deploy to GitHub Pages. The default is `public`.
|
||||
A source directory to deploy to GitHub Pages. The default is `public`.
|
||||
|
||||
```yaml
|
||||
- name: Deploy
|
||||
@@ -259,7 +266,22 @@ A target directory to deploy to GitHub Pages. The default is `public`.
|
||||
publish_dir: ./out # default: public
|
||||
```
|
||||
|
||||
### ⭐️ CNAME
|
||||
### ⭐️ Deploy to Subdirectory `destination_dir`
|
||||
|
||||
*This feature is on beta.*
|
||||
*Any feedback is welcome at [Issue #324](https://github.com/peaceiris/actions-gh-pages/issues/324)*
|
||||
|
||||
A destination subdirectory on a publishing branch. The default is empty.
|
||||
|
||||
```yaml
|
||||
- name: Deploy
|
||||
uses: peaceiris/actions-gh-pages@v3.7.0-0
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
destination_dir: subdir
|
||||
```
|
||||
|
||||
### ⭐️ Add CNAME file `cname`
|
||||
|
||||
To add `CNAME` file, we can set the `cname` option.
|
||||
|
||||
@@ -274,7 +296,7 @@ For more details about `CNAME`, read the official documentation: [Managing a cus
|
||||
cname: github.com
|
||||
```
|
||||
|
||||
### ⭐️ Enable Built-in Jekyll
|
||||
### ⭐️ Enable Built-in Jekyll `enable_jekyll`
|
||||
|
||||
If you want GitHub Pages to process your site with the static site generator Jekyll, set `enable_jekyll` to true.
|
||||
|
||||
@@ -296,7 +318,7 @@ Bypassing Jekyll makes the deployment faster and is necessary if you are deployi
|
||||
|
||||
For more details about `.nojekyll`: [Bypassing Jekyll on GitHub Pages - The GitHub Blog](https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/)
|
||||
|
||||
### ⭐️ Allow empty commits
|
||||
### ⭐️ Allow empty commits `allow_empty_commit`
|
||||
|
||||
By default, a commit will not be generated when no file changes. If you want to allow an empty commit, set the optional parameter `allow_empty_commit` to `true`.
|
||||
|
||||
@@ -311,7 +333,7 @@ For example:
|
||||
allow_empty_commit: true
|
||||
```
|
||||
|
||||
### ⭐️ Keeping existing files
|
||||
### ⭐️ Keeping existing files `keep_files`
|
||||
|
||||
By default, existing files in the publish branch are removed before adding the ones from publish dir. If you want the action to add new files but leave existing ones untouched, set the optional parameter `keep_files` to `true`.
|
||||
|
||||
@@ -326,7 +348,7 @@ For example:
|
||||
keep_files: true
|
||||
```
|
||||
|
||||
### ⭐️ Deploy to external repository
|
||||
### ⭐️ Deploy to external repository `external_repository`
|
||||
|
||||
By default, your files are published to the repository which is running this action.
|
||||
If you want to publish to another repository on GitHub, set the environment variable `external_repository` to `<username>/<external-repository>`.
|
||||
@@ -348,14 +370,14 @@ When you use `deploy_key`, set your private key to the repository which includes
|
||||
|
||||
**Note that `GITHUB_TOKEN` has no permission to access to external repositories. Please create a personal access token and set it to `personal_token` like `personal_token: ${{ secrets.PERSONAL_TOKEN }}`.**
|
||||
|
||||
Use case:
|
||||
Use case:
|
||||
|
||||
A GitHub Free Plan account cannot use the GitHub Pages in a private repository. To make your source contents private and deploy it with the GitHub Pages, you can deploy your site from a private repository to a public repository using this option.
|
||||
|
||||
- `peaceiris/homepage`: A private repository running this action with `external_repository: peaceiris/peaceiris.github.io`
|
||||
- `peaceiris/peaceiris.github.io`: A public repository using GitHub Pages
|
||||
|
||||
### ⭐️ Force orphan
|
||||
### ⭐️ Force orphan `force_orphan`
|
||||
|
||||
We can set the `force_orphan: true` option.
|
||||
This allows you to make your publish branch with only the latest commit.
|
||||
@@ -424,7 +446,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
|
||||
@@ -456,7 +478,7 @@ jobs:
|
||||
Commands on a local machine.
|
||||
|
||||
```console
|
||||
$ # On the master branch
|
||||
$ # On a main branch
|
||||
$ git tag -a "v1.2.3" -m "Release v1.2.3"
|
||||
$ git push origin "v1.2.3"
|
||||
|
||||
@@ -464,7 +486,7 @@ $ # After deployment
|
||||
$ git fetch origin
|
||||
$ git tag
|
||||
deploy-v1.2.3 # Tag on the gh-pages branch
|
||||
v1.2.3 # Tag on the master branch
|
||||
v1.2.3 # Tag on the main branch
|
||||
```
|
||||
|
||||
<div align="right">
|
||||
@@ -518,6 +540,50 @@ It is useful to watch this repository (release only) to check the [latest releas
|
||||
|
||||
[latest release]: https://github.com/peaceiris/actions-gh-pages/releases
|
||||
|
||||
For continuous updating, we can use the GitHub native Dependabot.
|
||||
Here is an example configuration of the bot. The config file is located in `.github/dependabot.yml`.
|
||||
|
||||
```yaml
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "CI/CD"
|
||||
commit-message:
|
||||
prefix: ci
|
||||
```
|
||||
|
||||
See the official documentation for more details about the Dependabot: [Keeping your dependencies updated automatically - GitHub Docs](https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically)
|
||||
|
||||
### ⭐️ Schedule and Manual Deployment
|
||||
|
||||
For deploying regularly, we can set the `on.schedule` workflow trigger.
|
||||
See [Scheduled events | Events that trigger workflows - GitHub Docs](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events)
|
||||
|
||||
For deploying manually, we can set the `on.workflow_dispatch` workflow trigger.
|
||||
See [Manual events `workflow_dispatch` | Events that trigger workflows - GitHub Docs](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#manual-events)
|
||||
|
||||
```yaml
|
||||
name: github pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
schedule:
|
||||
- cron: "22 22 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
...
|
||||
```
|
||||
|
||||
<div align="right">
|
||||
<a href="#table-of-contents">Back to TOC ☝️</a>
|
||||
</div>
|
||||
@@ -543,7 +609,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -552,7 +618,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v2.1.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
@@ -587,7 +653,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -596,7 +662,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v2.1.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
@@ -635,7 +701,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -644,7 +710,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v2.1.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
@@ -686,7 +752,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -695,7 +761,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v2.1.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
@@ -732,7 +798,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- '.github/workflows/deploy.yml'
|
||||
- 'website/**'
|
||||
@@ -747,7 +813,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v2.1.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
@@ -789,7 +855,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -845,7 +911,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -880,7 +946,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -920,7 +986,7 @@ name: github pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -929,7 +995,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v2.1.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
@@ -996,7 +1062,7 @@ name: GitHub Pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
@@ -1031,7 +1097,7 @@ jobs:
|
||||
|
||||
- [MIT License - peaceiris/actions-gh-pages]
|
||||
|
||||
[MIT License - peaceiris/actions-gh-pages]: https://github.com/peaceiris/actions-gh-pages/blob/master/LICENSE
|
||||
[MIT License - peaceiris/actions-gh-pages]: https://github.com/peaceiris/actions-gh-pages/blob/main/LICENSE
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ function getInputsLog(authMethod: string, inps: Inputs): string {
|
||||
[INFO] ${authMethod}: true
|
||||
[INFO] PublishBranch: ${inps.PublishBranch}
|
||||
[INFO] PublishDir: ${inps.PublishDir}
|
||||
[INFO] DestinationDir: ${inps.DestinationDir}
|
||||
[INFO] ExternalRepository: ${inps.ExternalRepository}
|
||||
[INFO] AllowEmptyCommit: ${inps.AllowEmptyCommit}
|
||||
[INFO] KeepFiles: ${inps.KeepFiles}
|
||||
@@ -52,6 +53,7 @@ function getInputsLog(authMethod: string, inps: Inputs): string {
|
||||
[INFO] TagMessage: ${inps.TagMessage}
|
||||
[INFO] EnableJekyll (DisableNoJekyll): ${inps.DisableNoJekyll}
|
||||
[INFO] CNAME: ${inps.CNAME}
|
||||
[INFO] ExcludeAssets ${inps.ExcludeAssets}
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -107,6 +109,7 @@ describe('getInputs()', () => {
|
||||
expect(inps.PersonalToken).toMatch('');
|
||||
expect(inps.PublishBranch).toMatch('gh-pages');
|
||||
expect(inps.PublishDir).toMatch('public');
|
||||
expect(inps.DestinationDir).toMatch('');
|
||||
expect(inps.ExternalRepository).toMatch('');
|
||||
expect(inps.AllowEmptyCommit).toBe(false);
|
||||
expect(inps.KeepFiles).toBe(false);
|
||||
@@ -119,6 +122,7 @@ describe('getInputs()', () => {
|
||||
expect(inps.TagMessage).toMatch('');
|
||||
expect(inps.DisableNoJekyll).toBe(false);
|
||||
expect(inps.CNAME).toMatch('');
|
||||
expect(inps.ExcludeAssets).toMatch('.github');
|
||||
});
|
||||
|
||||
test('get spec inputs', () => {
|
||||
@@ -127,6 +131,7 @@ describe('getInputs()', () => {
|
||||
process.env['INPUT_PERSONAL_TOKEN'] = 'test_personal_token';
|
||||
process.env['INPUT_PUBLISH_BRANCH'] = 'master';
|
||||
process.env['INPUT_PUBLISH_DIR'] = 'out';
|
||||
process.env['INPUT_DESTINATION_DIR'] = 'subdir';
|
||||
process.env['INPUT_EXTERNAL_REPOSITORY'] = 'user/repo';
|
||||
process.env['INPUT_ALLOW_EMPTY_COMMIT'] = 'true';
|
||||
process.env['INPUT_KEEP_FILES'] = 'true';
|
||||
@@ -139,6 +144,7 @@ describe('getInputs()', () => {
|
||||
process.env['INPUT_TAG_MESSAGE'] = 'Deployment v1.2.3';
|
||||
process.env['INPUT_DISABLE_NOJEKYLL'] = 'true';
|
||||
process.env['INPUT_CNAME'] = 'github.com';
|
||||
process.env['INPUT_EXCLUDE_ASSETS'] = '.github';
|
||||
|
||||
const inps: Inputs = getInputs();
|
||||
|
||||
@@ -147,6 +153,7 @@ describe('getInputs()', () => {
|
||||
expect(inps.PersonalToken).toMatch('test_personal_token');
|
||||
expect(inps.PublishBranch).toMatch('master');
|
||||
expect(inps.PublishDir).toMatch('out');
|
||||
expect(inps.DestinationDir).toMatch('subdir');
|
||||
expect(inps.ExternalRepository).toMatch('user/repo');
|
||||
expect(inps.AllowEmptyCommit).toBe(true);
|
||||
expect(inps.KeepFiles).toBe(true);
|
||||
@@ -159,6 +166,7 @@ describe('getInputs()', () => {
|
||||
expect(inps.TagMessage).toMatch('Deployment v1.2.3');
|
||||
expect(inps.DisableNoJekyll).toBe(true);
|
||||
expect(inps.CNAME).toMatch('github.com');
|
||||
expect(inps.ExcludeAssets).toMatch('.github');
|
||||
});
|
||||
|
||||
test('get spec inputs enable_jekyll', () => {
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
import {getUserName, getUserEmail, setCommitAuthor, getCommitMessage} from '../src/git-utils';
|
||||
import {getWorkDirName, createWorkDir} from '../src/utils';
|
||||
import {
|
||||
setRepo,
|
||||
getUserName,
|
||||
getUserEmail,
|
||||
setCommitAuthor,
|
||||
getCommitMessage
|
||||
} from '../src/git-utils';
|
||||
import {getInputs} from '../src/get-inputs';
|
||||
import {Inputs} from '../src/interfaces';
|
||||
import {getWorkDirName, createDir} from '../src/utils';
|
||||
import {CmdResult} from '../src/interfaces';
|
||||
import * as exec from '@actions/exec';
|
||||
|
||||
@@ -14,6 +22,36 @@ afterEach(() => {
|
||||
delete process.env['GITHUB_REPOSITORY'];
|
||||
});
|
||||
|
||||
describe('setRepo()', () => {
|
||||
test('throw error destination_dir should be a relative path', async () => {
|
||||
process.env['INPUT_GITHUB_TOKEN'] = 'test_github_token';
|
||||
process.env['INPUT_PUBLISH_BRANCH'] = 'gh-pages';
|
||||
process.env['INPUT_PUBLISH_DIR'] = 'public';
|
||||
process.env['INPUT_DESTINATION_DIR'] = '/subdir';
|
||||
// process.env['INPUT_EXTERNAL_REPOSITORY'] = 'user/repo';
|
||||
// process.env['INPUT_ALLOW_EMPTY_COMMIT'] = 'true';
|
||||
// process.env['INPUT_KEEP_FILES'] = 'true';
|
||||
// process.env['INPUT_FORCE_ORPHAN'] = 'true';
|
||||
// process.env['INPUT_USER_NAME'] = 'username';
|
||||
// process.env['INPUT_USER_EMAIL'] = 'github@github.com';
|
||||
// process.env['INPUT_COMMIT_MESSAGE'] = 'feat: Add new feature';
|
||||
// process.env['INPUT_FULL_COMMIT_MESSAGE'] = 'feat: Add new feature';
|
||||
// process.env['INPUT_TAG_NAME'] = 'deploy-v1.2.3';
|
||||
// process.env['INPUT_TAG_MESSAGE'] = 'Deployment v1.2.3';
|
||||
// process.env['INPUT_DISABLE_NOJEKYLL'] = 'true';
|
||||
// process.env['INPUT_CNAME'] = 'github.com';
|
||||
process.env['INPUT_EXCLUDE_ASSETS'] = '.github';
|
||||
const inps: Inputs = getInputs();
|
||||
const remoteURL = 'https://x-access-token:pat@github.com/actions/pages.git';
|
||||
const date = new Date();
|
||||
const unixTime = date.getTime();
|
||||
const workDir = await getWorkDirName(`${unixTime}`);
|
||||
await expect(setRepo(inps, remoteURL, workDir)).rejects.toThrowError(
|
||||
'destination_dir should be a relative path'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getUserName()', () => {
|
||||
test('get default git user name', () => {
|
||||
const userName = '';
|
||||
@@ -51,7 +89,7 @@ describe('setCommitAuthor()', () => {
|
||||
})();
|
||||
|
||||
beforeEach(async () => {
|
||||
await createWorkDir(workDirName);
|
||||
await createDir(workDirName);
|
||||
process.chdir(workDirName);
|
||||
await exec.exec('git', ['init']);
|
||||
});
|
||||
|
||||
@@ -47,6 +47,32 @@ describe('setGithubToken()', () => {
|
||||
expect(test).toMatch(expected);
|
||||
});
|
||||
|
||||
test('return remote url with GITHUB_TOKEN gh-pages (RegExp)', () => {
|
||||
const expected = 'https://x-access-token:GITHUB_TOKEN@github.com/owner/repo.git';
|
||||
const test = setGithubToken(
|
||||
'GITHUB_TOKEN',
|
||||
'owner/repo',
|
||||
'gh-pages',
|
||||
'',
|
||||
'refs/heads/gh-pages-base',
|
||||
'push'
|
||||
);
|
||||
expect(test).toMatch(expected);
|
||||
});
|
||||
|
||||
test('throw error gh-pages-base to gh-pages-base (RegExp)', () => {
|
||||
expect(() => {
|
||||
setGithubToken(
|
||||
'GITHUB_TOKEN',
|
||||
'owner/repo',
|
||||
'gh-pages-base',
|
||||
'',
|
||||
'refs/heads/gh-pages-base',
|
||||
'push'
|
||||
);
|
||||
}).toThrowError('You deploy from gh-pages-base to gh-pages-base');
|
||||
});
|
||||
|
||||
test('throw error master to master', () => {
|
||||
expect(() => {
|
||||
setGithubToken('GITHUB_TOKEN', 'owner/repo', 'master', '', 'refs/heads/master', 'push');
|
||||
|
||||
@@ -3,7 +3,7 @@ import fs from 'fs';
|
||||
import {
|
||||
getHomeDir,
|
||||
getWorkDirName,
|
||||
createWorkDir,
|
||||
createDir,
|
||||
addNoJekyll,
|
||||
addCNAME,
|
||||
skipOnFork
|
||||
@@ -51,11 +51,11 @@ describe('getWorkDirName()', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('createWorkDir()', () => {
|
||||
test('create work directory', async () => {
|
||||
describe('createDir()', () => {
|
||||
test('create a directory', async () => {
|
||||
const unixTime = await getTime();
|
||||
const workDirName = await getWorkDirName(`${unixTime}`);
|
||||
await createWorkDir(workDirName);
|
||||
await createDir(workDirName);
|
||||
const test = fs.existsSync(workDirName);
|
||||
expect(test).toBe(true);
|
||||
});
|
||||
@@ -65,7 +65,7 @@ async function getWorkDir(): Promise<string> {
|
||||
const unixTime = await getTime();
|
||||
let workDir = '';
|
||||
workDir = await getWorkDirName(`${unixTime}`);
|
||||
await createWorkDir(workDir);
|
||||
await createDir(workDir);
|
||||
return workDir;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,10 @@ inputs:
|
||||
description: 'Set an input directory for deployment.'
|
||||
required: false
|
||||
default: 'public'
|
||||
destination_dir:
|
||||
description: 'Set an destination subdirectory for deployment.'
|
||||
required: false
|
||||
default: ''
|
||||
external_repository:
|
||||
description: 'Set an external repository (owner/repo).'
|
||||
required: false
|
||||
@@ -69,3 +73,7 @@ inputs:
|
||||
cname:
|
||||
description: 'Set custom domain'
|
||||
required: false
|
||||
exclude_assets:
|
||||
description: 'Set files or directories to exclude from a publish directory.'
|
||||
required: false
|
||||
default: '.github'
|
||||
|
||||
16
docker-compose.yml
Normal file
16
docker-compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
dev:
|
||||
image: 'docker.pkg.github.com/peaceiris/actions-gh-pages/dev:latest'
|
||||
build:
|
||||
context: .
|
||||
cache_from:
|
||||
- 'docker.pkg.github.com/peaceiris/actions-gh-pages/dev:latest'
|
||||
container_name: peaceiris_actions_github_pages
|
||||
volumes:
|
||||
- ${PWD}:/repo
|
||||
stdin_open: true
|
||||
tty: true
|
||||
command:
|
||||
- bash
|
||||
File diff suppressed because one or more lines are too long
1192
package-lock.json
generated
1192
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "actions-github-pages",
|
||||
"version": "3.6.2",
|
||||
"version": "3.7.0-6",
|
||||
"description": "GitHub Actions for GitHub Pages",
|
||||
"main": "lib/index.js",
|
||||
"engines": {
|
||||
@@ -57,10 +57,11 @@
|
||||
"@actions/core": "^1.2.4",
|
||||
"@actions/exec": "^1.0.4",
|
||||
"@actions/github": "^4.0.0",
|
||||
"@actions/glob": "^0.1.0",
|
||||
"@actions/io": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^26.0.4",
|
||||
"@types/jest": "^26.0.7",
|
||||
"@types/js-yaml": "^3.12.4",
|
||||
"@types/node": "~12",
|
||||
"@typescript-eslint/eslint-plugin": "^2.34.0",
|
||||
@@ -76,8 +77,8 @@
|
||||
"js-yaml": "^3.14.0",
|
||||
"lint-staged": "^10.2.11",
|
||||
"prettier": "2.0.5",
|
||||
"standard-version": "^8.0.0",
|
||||
"standard-version": "^8.0.2",
|
||||
"ts-jest": "^25.5.1",
|
||||
"typescript": "^3.9.6"
|
||||
"typescript": "^3.9.7"
|
||||
}
|
||||
}
|
||||
|
||||
16
release.sh
16
release.sh
@@ -3,9 +3,11 @@
|
||||
# fail on unset variables and command errors
|
||||
set -eu -o pipefail # -x: is for debugging
|
||||
|
||||
DEFAULT_BRANCH="main"
|
||||
|
||||
CURRENT_BRANCH="$(git branch --show-current)"
|
||||
if [ "${CURRENT_BRANCH}" != "master" ]; then
|
||||
echo "$0: Current branch ${CURRENT_BRANCH} is not master, continue? (y/n)"
|
||||
if [ "${CURRENT_BRANCH}" != "${DEFAULT_BRANCH}" ]; then
|
||||
echo "$0: Current branch ${CURRENT_BRANCH} is not ${DEFAULT_BRANCH}, continue? (y/n)"
|
||||
read -r res
|
||||
if [ "${res}" = "n" ]; then
|
||||
echo "$0: Stop script"
|
||||
@@ -14,7 +16,7 @@ if [ "${CURRENT_BRANCH}" != "master" ]; then
|
||||
fi
|
||||
|
||||
PRERELEASE_TYPE_LIST="prerelease prepatch preminor premajor"
|
||||
if [ "${CURRENT_BRANCH}" != "master" ]; then
|
||||
if [ "${CURRENT_BRANCH}" != "${DEFAULT_BRANCH}" ]; then
|
||||
RELEASE_TYPE_LIST="${PRERELEASE_TYPE_LIST}"
|
||||
else
|
||||
RELEASE_TYPE_LIST="${PRERELEASE_TYPE_LIST} patch minor major"
|
||||
@@ -37,10 +39,10 @@ if [ "${res}" = "n" ]; then
|
||||
fi
|
||||
|
||||
git fetch origin
|
||||
if [ "${CURRENT_BRANCH}" != "master" ]; then
|
||||
if [ "${CURRENT_BRANCH}" != "${DEFAULT_BRANCH}" ]; then
|
||||
git pull origin "${CURRENT_BRANCH}"
|
||||
else
|
||||
git pull origin master
|
||||
git pull origin ${DEFAULT_BRANCH}
|
||||
git tag -d v3 || true
|
||||
git pull origin --tags
|
||||
fi
|
||||
@@ -58,10 +60,10 @@ git rm ./lib/index.js
|
||||
rm -rf ./lib
|
||||
git commit -m "chore(release): Remove build assets [skip ci]"
|
||||
|
||||
if [ "${CURRENT_BRANCH}" != "master" ]; then
|
||||
if [ "${CURRENT_BRANCH}" != "${DEFAULT_BRANCH}" ]; then
|
||||
git push origin "${CURRENT_BRANCH}"
|
||||
else
|
||||
git push origin master
|
||||
git push origin ${DEFAULT_BRANCH}
|
||||
fi
|
||||
|
||||
TAG_NAME="v$(jq -r '.version' ./package.json)"
|
||||
|
||||
@@ -15,6 +15,7 @@ export function showInputs(inps: Inputs): void {
|
||||
[INFO] ${authMethod}: true
|
||||
[INFO] PublishBranch: ${inps.PublishBranch}
|
||||
[INFO] PublishDir: ${inps.PublishDir}
|
||||
[INFO] DestinationDir: ${inps.DestinationDir}
|
||||
[INFO] ExternalRepository: ${inps.ExternalRepository}
|
||||
[INFO] AllowEmptyCommit: ${inps.AllowEmptyCommit}
|
||||
[INFO] KeepFiles: ${inps.KeepFiles}
|
||||
@@ -27,6 +28,7 @@ export function showInputs(inps: Inputs): void {
|
||||
[INFO] TagMessage: ${inps.TagMessage}
|
||||
[INFO] EnableJekyll (DisableNoJekyll): ${inps.DisableNoJekyll}
|
||||
[INFO] CNAME: ${inps.CNAME}
|
||||
[INFO] ExcludeAssets ${inps.ExcludeAssets}
|
||||
`);
|
||||
}
|
||||
|
||||
@@ -52,6 +54,7 @@ export function getInputs(): Inputs {
|
||||
PersonalToken: core.getInput('personal_token'),
|
||||
PublishBranch: core.getInput('publish_branch'),
|
||||
PublishDir: core.getInput('publish_dir'),
|
||||
DestinationDir: core.getInput('destination_dir'),
|
||||
ExternalRepository: core.getInput('external_repository'),
|
||||
AllowEmptyCommit: (core.getInput('allow_empty_commit') || 'false').toUpperCase() === 'TRUE',
|
||||
KeepFiles: (core.getInput('keep_files') || 'false').toUpperCase() === 'TRUE',
|
||||
@@ -63,7 +66,8 @@ export function getInputs(): Inputs {
|
||||
TagName: core.getInput('tag_name'),
|
||||
TagMessage: core.getInput('tag_message'),
|
||||
DisableNoJekyll: useBuiltinJekyll,
|
||||
CNAME: core.getInput('cname')
|
||||
CNAME: core.getInput('cname'),
|
||||
ExcludeAssets: core.getInput('exclude_assets')
|
||||
};
|
||||
|
||||
return inps;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import * as core from '@actions/core';
|
||||
import * as exec from '@actions/exec';
|
||||
import * as io from '@actions/io';
|
||||
import * as glob from '@actions/glob';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import {Inputs, CmdResult} from './interfaces';
|
||||
import {createWorkDir} from './utils';
|
||||
import {createDir} from './utils';
|
||||
|
||||
export async function createBranchForce(branch: string): Promise<void> {
|
||||
await exec.exec('git', ['init']);
|
||||
@@ -12,31 +13,75 @@ export async function createBranchForce(branch: string): Promise<void> {
|
||||
return;
|
||||
}
|
||||
|
||||
export async function copyAssets(publishDir: string, workDir: string): Promise<void> {
|
||||
export async function deleteExcludedAssets(destDir: string, excludeAssets: string): Promise<void> {
|
||||
core.info(`[INFO] delete excluded assets`);
|
||||
const excludedAssetNames: Array<string> = excludeAssets.split(',');
|
||||
const excludedAssetPaths = ((): Array<string> => {
|
||||
const paths: Array<string> = [];
|
||||
for (const pattern of excludedAssetNames) {
|
||||
paths.push(path.join(destDir, pattern));
|
||||
}
|
||||
return paths;
|
||||
})();
|
||||
const globber = await glob.create(excludedAssetPaths.join('\n'));
|
||||
for await (const asset of globber.globGenerator()) {
|
||||
io.rmRF(asset);
|
||||
core.info(`[INFO] delete ${asset}`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
export async function copyAssets(
|
||||
publishDir: string,
|
||||
destDir: string,
|
||||
excludeAssets: string
|
||||
): Promise<void> {
|
||||
core.info(`[INFO] prepare publishing assets`);
|
||||
const copyOpts = {recursive: true, force: true};
|
||||
const files = fs.readdirSync(publishDir);
|
||||
core.debug(`${files}`);
|
||||
for await (const file of files) {
|
||||
if (file.endsWith('.git') || file.endsWith('.github')) {
|
||||
if (file === '.git') {
|
||||
core.info(`[INFO] skip ${file}`);
|
||||
continue;
|
||||
}
|
||||
const filePath = path.join(publishDir, file);
|
||||
await io.cp(filePath, `${workDir}/`, copyOpts);
|
||||
const filePublishPath = path.join(publishDir, file);
|
||||
const fileDestPath = path.join(destDir, file);
|
||||
const destPath = path.dirname(fileDestPath);
|
||||
if (fs.existsSync(destPath) === false) {
|
||||
await createDir(destPath);
|
||||
}
|
||||
await io.cp(filePublishPath, fileDestPath, copyOpts);
|
||||
core.info(`[INFO] copy ${file}`);
|
||||
}
|
||||
|
||||
await deleteExcludedAssets(destDir, excludeAssets);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
export async function setRepo(inps: Inputs, remoteURL: string, workDir: string): Promise<void> {
|
||||
const publishDir = path.join(`${process.env.GITHUB_WORKSPACE}`, inps.PublishDir);
|
||||
const publishDir = path.isAbsolute(inps.PublishDir)
|
||||
? inps.PublishDir
|
||||
: path.join(`${process.env.GITHUB_WORKSPACE}`, inps.PublishDir);
|
||||
|
||||
if (path.isAbsolute(inps.DestinationDir)) {
|
||||
throw new Error('destination_dir should be a relative path');
|
||||
}
|
||||
const destDir = ((): string => {
|
||||
if (inps.DestinationDir === '') {
|
||||
return workDir;
|
||||
} else {
|
||||
return path.join(workDir, inps.DestinationDir);
|
||||
}
|
||||
})();
|
||||
|
||||
core.info(`[INFO] ForceOrphan: ${inps.ForceOrphan}`);
|
||||
if (inps.ForceOrphan) {
|
||||
await createWorkDir(workDir);
|
||||
await createDir(destDir);
|
||||
process.chdir(workDir);
|
||||
await createBranchForce(inps.PublishBranch);
|
||||
await copyAssets(publishDir, workDir);
|
||||
await copyAssets(publishDir, destDir, inps.ExcludeAssets);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -59,14 +104,27 @@ export async function setRepo(inps: Inputs, remoteURL: string, workDir: string):
|
||||
options
|
||||
);
|
||||
if (result.exitcode === 0) {
|
||||
process.chdir(workDir);
|
||||
if (inps.KeepFiles) {
|
||||
core.info('[INFO] Keep existing files');
|
||||
await createDir(destDir);
|
||||
process.chdir(destDir);
|
||||
|
||||
if (inps.DestinationDir !== '') {
|
||||
if (inps.KeepFiles) {
|
||||
core.info('[INFO] Keep existing files');
|
||||
} else {
|
||||
core.info(`[INFO] clean up ${destDir}`);
|
||||
await exec.exec('git', ['rm', '-r', '--ignore-unmatch', '*']);
|
||||
}
|
||||
} else {
|
||||
await exec.exec('git', ['rm', '-r', '--ignore-unmatch', '*']);
|
||||
if (inps.KeepFiles) {
|
||||
core.info('[INFO] Keep existing files');
|
||||
} else {
|
||||
core.info(`[INFO] clean up ${destDir}`);
|
||||
await exec.exec('git', ['rm', '-r', '--ignore-unmatch', '*']);
|
||||
}
|
||||
}
|
||||
|
||||
await copyAssets(publishDir, workDir);
|
||||
await copyAssets(publishDir, destDir, inps.ExcludeAssets);
|
||||
process.chdir(workDir);
|
||||
return;
|
||||
} else {
|
||||
throw new Error(`Failed to clone remote branch ${inps.PublishBranch}`);
|
||||
@@ -74,10 +132,10 @@ export async function setRepo(inps: Inputs, remoteURL: string, workDir: string):
|
||||
} catch (e) {
|
||||
core.info(`[INFO] first deployment, create new branch ${inps.PublishBranch}`);
|
||||
core.info(e.message);
|
||||
await createWorkDir(workDir);
|
||||
await createDir(destDir);
|
||||
process.chdir(workDir);
|
||||
await createBranchForce(inps.PublishBranch);
|
||||
await copyAssets(publishDir, workDir);
|
||||
await copyAssets(publishDir, destDir, inps.ExcludeAssets);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ export interface Inputs {
|
||||
readonly PersonalToken: string;
|
||||
readonly PublishBranch: string;
|
||||
readonly PublishDir: string;
|
||||
readonly DestinationDir: string;
|
||||
readonly ExternalRepository: string;
|
||||
readonly AllowEmptyCommit: boolean;
|
||||
readonly KeepFiles: boolean;
|
||||
@@ -16,6 +17,7 @@ export interface Inputs {
|
||||
readonly TagMessage: string;
|
||||
readonly DisableNoJekyll: boolean;
|
||||
readonly CNAME: string;
|
||||
readonly ExcludeAssets: string;
|
||||
}
|
||||
|
||||
export interface CmdResult {
|
||||
|
||||
@@ -83,9 +83,12 @@ Use deploy_key or personal_token.
|
||||
}
|
||||
|
||||
if (eventName === 'push') {
|
||||
isProhibitedBranch = ref.includes(`refs/heads/${publishBranch}`);
|
||||
isProhibitedBranch = ref.match(new RegExp(`^refs/heads/${publishBranch}$`)) !== null;
|
||||
if (isProhibitedBranch) {
|
||||
throw new Error(`You deploy from ${publishBranch} to ${publishBranch}`);
|
||||
throw new Error(`\
|
||||
You deploy from ${publishBranch} to ${publishBranch}
|
||||
This operation is prohibited to protect your contents
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@ export async function getWorkDirName(unixTime: string): Promise<string> {
|
||||
return workDirName;
|
||||
}
|
||||
|
||||
export async function createWorkDir(workDirName: string): Promise<void> {
|
||||
await io.mkdirP(workDirName);
|
||||
core.debug(`Created: ${workDirName}`);
|
||||
export async function createDir(dirPath: string): Promise<void> {
|
||||
await io.mkdirP(dirPath);
|
||||
core.debug(`Created directory ${dirPath}`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ export async function addCNAME(workDir: string, content: string): Promise<void>
|
||||
}
|
||||
const filepath = path.join(workDir, 'CNAME');
|
||||
if (fs.existsSync(filepath)) {
|
||||
core.warning(`CNAME already exists, skip adding CNAME`);
|
||||
core.info(`CNAME already exists, skip adding CNAME`);
|
||||
return;
|
||||
}
|
||||
fs.writeFileSync(filepath, content + '\n');
|
||||
|
||||
Reference in New Issue
Block a user