isite

Convert GitHub issues to a website.
Features
- use GitHub issues as the source of truth
- generate posts from the issues with issue comments and reactions
- allow GFM with restricted HTML support
Examples
Installation
Usage
isite generate --help
By default, isite generate uses Hugo with the PaperMod theme. After generating the site, build it with Hugo or
explicitly select another supported engine.
Hugo and Zola theme clones are cached in ~/.cache/isite/themes for seven days. Remove expired caches with:
isite prune
Engines
- Hugo (default)
- zola
- default theme: Even, modified to support comments and reactions
- Astro
Hugo (default)
isite generate --base-url https://example.github.io/repository
cd output
hugo
OG metadata and images are enabled in production. Preview locally with:
hugo server --baseURL http://localhost:1313/ --appendPort=false
The output is output/public; posts are in content/posts/.
Astro
isite generate --engine astro --base-url https://example.github.io/repository
cd output
npm install
npm run build
The output is output/dist. Astro themes must be AstroPaper-compatible.
GitHub Actions
[!IMPORTANT]
Please remember to enable the GitHub Pages with GitHub Actions as the source.
You can audit and apply the following GitHub Actions workflow to deploy the static content generated by isite to
GitHub Pages.
name: Deploy static content to Pages
on:
issues:
types:
- opened
- edited
- closed
- reopened
- labeled
- unlabeled
issue_comment:
types:
- created
- edited
- deleted
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ github.token }}
# bump the versions here
ISITE_VERSION: v0.4.0
HUGO_VERSION: v0.165.0
USER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
# change this to your custom domain name
BASE_URL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
persist-credentials: false
- name: Generate markdown
run: |
gh release download $ISITE_VERSION --repo kemingy/isite -p '*linux_amd64*' -O- \
| tar -xz -C /usr/local/bin isite
isite generate --user $USER --repo $REPO --base-url $BASE_URL
HUGO_ASSET="hugo_extended_${HUGO_VERSION#v}_linux-amd64.tar.gz"
gh release download $HUGO_VERSION --repo gohugoio/hugo \
-p "$HUGO_ASSET" -O- | tar -xz -C /usr/local/bin hugo
hugo --source output --destination public --baseURL $BASE_URL
- name: Setup Pages
uses: actions/configure-pages@v6
- name: Upload artifact
uses: actions/upload-pages-artifact@v5
with:
path: 'output/public'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
Deploy with Astro
Replace the Hugo generation/build step with:
- name: Generate Astro site
run: |
gh release download $ISITE_VERSION --repo kemingy/isite -p '*linux_amd64*' -O- \
| tar -xz -C /usr/local/bin isite
isite generate --engine astro --user $USER --repo $REPO --base-url $BASE_URL
npm install --prefix output
npm run build --prefix output
- name: Upload Astro artifact
uses: actions/upload-pages-artifact@v5
with:
path: 'output/dist'
Deploy with Zola
- name: Generate Zola site
env:
ZOLA_VERSION: v0.23.4
run: |
gh release download $ISITE_VERSION --repo kemingy/isite -p '*linux_amd64*' -O- \
| tar -xz -C /usr/local/bin isite
gh release download $ZOLA_VERSION --repo getzola/zola \
-p '*x86_64-unknown-linux-gnu*' -O- | tar -xz -C /usr/local/bin zola
isite generate --engine zola --user $USER --repo $REPO --base-url $BASE_URL
(cd output && zola build --base-url $BASE_URL)
- name: Upload Zola artifact
uses: actions/upload-pages-artifact@v5
with:
path: 'output/public'
Customization
Domain name
Change the BASE_URL in the GitHub Actions workflow to your custom domain name.
Other themes
isite generate --theme <theme_name> --theme-repo <user/repo>
For Astro, use an AstroPaper-compatible repository with --engine astro.
Zola
isite generate --engine zola --base-url https://example.github.io/repository
cd output
zola build --base-url https://example.github.io/repository
Backup Markdown files to the Repo
- name: backup markdown files
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name "GitHub Actions Bot"
git config user.email "github-actions@users.noreply.github.com"
git checkout -b backup
git add output/content
git commit -m "Backup markdown files"
git push --force origin backup