diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..0c51d13 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,43 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - main + workflow_dispatch: + +concurrency: + group: deploy + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20.x + cache: npm + - name: Install npm dependencies + run: npm install + - name: Build with Suri + run: npm run build + - name: Upload GitHub Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: build/ + deploy: + needs: build + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c9b501 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# npm +/node_modules + +# Suri +/build diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3231767 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2024 Justin Stayton + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b8353d2 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +

+ Suri +

+ +

+ Your own short links as an easily deployed static site on GitHub Pages +

+ +You're viewing a template repository tailored for deploying Suri to +[GitHub Pages](https://pages.github.com/) with +[GitHub Actions](https://docs.github.com/en/actions). Head over to +[the main repository](https://github.com/surishortlink/suri) to learn more about +Suri, including additional deployment options. + +## Setup: Step By Step + +1. Hit the "Use this template" button above and then "Create a new repository". + Fill in the required details to create a new repository based on this one. +2. Go to the "Settings" of your new repository and head to the "Pages" section. + Under "Build and deployment", change the "Source" to "GitHub Actions". +3. Go to the "Actions" of your new repository. There should be a workflow run + that likely failed because the previous step wasn't yet completed. Go ahead + and view the workflow run and hit the "Re-run jobs" button. + +### Auto-Deploy + +Any commits to the `main` branch of your new repository will trigger a new build +and deploy. You can change this by editing +[`.github/workflows/deploy.yml`](.github/workflows/deploy.yml), which is the +GitHub Actions workflow for building the site and deploying to GitHub Pages. + +### Custom Domain + +To use a custom domain, follow GitHub's guide: +[Managing a custom domain for your GitHub Pages site](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site). + +## How It Works + +### Manage Links + +At the heart of Suri is the [`links.json`](src/links.json) file, located in the +`src` directory, where you manage your links. All of the template repositories +include this file seeded with a few examples: + +```json +{ + "/": "https://www.youtube.com/watch?v=CsHiG-43Fzg", + "1": "https://fee.org/articles/the-use-of-knowledge-in-society/", + "gh": "https://github.com/surishortlink/suri" +} +``` + +It couldn't be simpler: the key is the "short link" path that gets redirected, +and the value is the target URL. Keys can be as short or as long as you want, +using whatever mixture of characters you want. `/` is a special entry for +redirecting the root path. + +### Build Static Site + +Suri ships with a `suri` executable file that generates the static site from the +`links.json` file. The static site is output to a directory named `build`. + +All of the template repositories are configured with a `build` script that +invokes this executable, making the command you run simple: + +```bash +npm run build +``` + +When you make a change to the `links.json` file, simply re-run this command to +re-generate the static site, which can then be re-deployed. This template +repository is configured to do this automatically. + +### Config + +Configuration is handled through the [`suri.config.json`](suri.config.json) file +in the root directory. There is only one option at this point: + +| Option | Description | Type | Default | +| ------ | ------------------------------------------------------------------ | ------- | ------- | +| `js` | Whether to redirect with JavaScript instead of a `` refresh. | Boolean | `false` | + +### Public Directory + +Finally, any files in the `public` directory will be copied over to the `build` +directory without modification when the static site is built. This can be useful +for files like `favicon.ico` or `robots.txt` (that said, Suri provides sensible +defaults for both). diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..13f9e0a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,31 @@ +{ + "name": "@surishortlink/deploy-github", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@surishortlink/deploy-github", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@surishortlink/suri": "^1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@surishortlink/suri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@surishortlink/suri/-/suri-1.0.0.tgz", + "integrity": "sha512-iPp4OaZviA7HQqbOfhEMk6cRP7yl7+NDiuGEPBLS4SRF5+iNFJRwmPACBJ9TvHMZDH6Jus0XQsRnq6JBIPpFqw==", + "dev": true, + "bin": { + "suri": "bin/suri.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..03256b7 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "@surishortlink/deploy-github", + "version": "1.0.0", + "private": true, + "type": "module", + "description": "A template repository tailored for deploying Suri to GitHub Pages", + "homepage": "https://github.com/surishortlink/suri-deploy-github#readme", + "bugs": "https://github.com/surishortlink/suri-deploy-github/issues", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/surishortlink/suri-deploy-github.git" + }, + "scripts": { + "build": "suri" + }, + "devDependencies": { + "@surishortlink/suri": "^1" + }, + "engines": { + "node": ">=18" + } +} diff --git a/src/links.json b/src/links.json new file mode 100644 index 0000000..fcb8fc9 --- /dev/null +++ b/src/links.json @@ -0,0 +1,5 @@ +{ + "/": "https://www.youtube.com/watch?v=CsHiG-43Fzg", + "1": "https://fee.org/articles/the-use-of-knowledge-in-society/", + "gh": "https://github.com/surishortlink/suri" +} diff --git a/suri.config.json b/suri.config.json new file mode 100644 index 0000000..d8351c5 --- /dev/null +++ b/suri.config.json @@ -0,0 +1,3 @@ +{ + "js": false +}