From 00b05fa5bfcde817704b043295977bd09ff26585 Mon Sep 17 00:00:00 2001 From: Dafnik Date: Wed, 22 May 2024 13:04:23 +0200 Subject: [PATCH] feat: text enhancements --- .github/ssp/pr-comment-screenshot.png | Bin 0 -> 39016 bytes README.md | 28 +++++++++++++++++--------- action.yml | 12 +++++------ 3 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 .github/ssp/pr-comment-screenshot.png diff --git a/.github/ssp/pr-comment-screenshot.png b/.github/ssp/pr-comment-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1fde95c77b6f4ed8eff3576eab3a70c5e897b7 GIT binary patch literal 39016 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

PNh96dH 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 03827ec..52bdcf5 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,21 @@ # Static Site Preview (SSP) -Deploy static site previews to a self-hosted server via ssh. +Deploy static site previews via ssh. -## Please note that this is in no way a secure solution for hosting static site previews. -- You should only use this in repositories you **DO NOT** trust. +## NOTICE +Please note that this is in no way a secure solution for hosting static site previews. +- You should only use this in repositories you **DO** trust. - You should only use this on a server - you **DO NOT** care about. - where you **DO NOT** have sensitive information stored. - where you **DO NOT** run other sensitive services. - Unless you jail the specific ssh user, you are allowing a GitHub Action full ssh access to your server. -- You allow any other repository with access to the same preview server to overwrite each others previews. (This should not happen under normal circumstances, as the GitHub Action uses a hash of repository name + pull request number) +- You allow any other repository with access to the same preview server to overwrite each other's previews. + + (Though this should not happen under normal circumstances, as the GitHub Action uses a hash of repository name + pull request number) + +## Screenshots +### GitHub Pull Request comment +![GitHub Pull Request comment][github-pull-request-comment-screenshot] ## Usage @@ -21,14 +28,16 @@ on: [pull_request] jobs: deploy: runs-on: ubuntu-latest + permissions: - pull-requests: write + pull-requests: write # needed for preview pull request comment actions: read # Deploy to the preview environment environment: name: preview-${{ github.event.number }} url: ${{ steps.deploy-preview.outputs.url }} + steps: - uses: actions/download-artifact@v4 with: @@ -63,12 +72,10 @@ jobs: Furthermore, see [action.yml](action.yml) ### NGINX Configuration -Previews are going to stored in the `/var/www/preview` directory. -``` -/etc/nginx/site-enabled/preview +Previews are stored in the `/var/www/preview` directory by default. ``` +# /etc/nginx/site-enabled/preview -``` server { listen 80; server_name *.preview.xyz.abc; @@ -120,7 +127,7 @@ server { ``` ### Cleanup cron job -Delete previews with not activity in the last 30 days. +Delete previews with no activity in the last 30 days. ```bash # /home/ubuntu/cronDeleteUnusedPreviews.sh @@ -163,3 +170,4 @@ The scripts and documentation in this project are released under the [MIT Licens [draft-release]: .github/workflows/draft-release.yml [release]: .github/workflows/release.yml [release-workflow-runs]: https://github.com/dafnik/ssp/actions/workflows/release.yml +[github-pull-request-comment-screenshot]: .github/ssp/pr-comment-screenshot.png diff --git a/action.yml b/action.yml index 085056b..4809c48 100644 --- a/action.yml +++ b/action.yml @@ -1,8 +1,8 @@ name: 'Static Site Preview (SSP)' -description: 'Deploy static site previews to a self-hosted server via ssh' +description: 'Deploy static site previews via ssh.' author: "Dafnik" branding: - icon: 'arrow-down-circle' + icon: 'truck' color: 'purple' inputs: @@ -37,8 +37,8 @@ runs: shell: bash if: github.event_name != 'pull_request' run : | - echo "static-site-preview can only be run from pull request" - echo "Check for pull request like this" + echo "SSP can only be run from pull requests, stopping..." + echo "Check for pull request in the action step like this" echo "if: github.event_name == 'pull_request'" exit 1 @@ -66,7 +66,7 @@ runs: shell: bash run: | if [ -z "${{ steps.hash.outputs.md5 }}" ]; then - echo "MD5 hash is empty. Failing the workflow." + echo "MD5 hash generation failed, stopping..." exit 1 else echo "MD5 hash: ${{ steps.hash.outputs.md5 }}" @@ -88,7 +88,7 @@ runs: uses: marocchino/sticky-pull-request-comment@v2 with: message: | - This pull request has been automatically deployed using Dafnik's static site preview (SSP) service. + This pull request has been automatically deployed using Dafnik's static site preview (SSP) action. [Learn more](https://github.com/Dafnik/ssp). 🔎 **Commit:** ${{ github.sha }}