Skip to content

Commit

Permalink
#23 Deploy site for each git branch
Browse files Browse the repository at this point in the history
  • Loading branch information
visortelle committed Dec 30, 2021
1 parent f1134af commit e685013
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 33 deletions.
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
# More: https://editorconfig.org/

root = true

[*]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
end_of_line = lf

[Makefile]
indent_style = tab
103 changes: 103 additions & 0 deletions .github/workflows/deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#!/usr/bin/env bash

# Deploy static site to the GitHub pages.

set -eo pipefail

git_repo_root=$(git rev-parse --show-toplevel)
site_src="${git_repo_root}/_site"
gh_pages_root="${git_repo_root}/docs"

# Site built from the main branch will be available at 'https://<domain_name>/'.
# Sites built from other branchs will be available at 'https://<domain_name>/branches/<branch_name>'.
main_git_branch="hakyll"

# replace "/", "#", etc with "-".
slugify() {
echo "$1" | iconv -c -t ascii//TRANSLIT | sed -E 's/[~^]+/-/g' | sed -E 's/[^a-zA-Z0-9]+/-/g' | sed -E 's/^-+|-+$/-/g' | tr A-Z a-z
}

deploy() {
if [[ ! -z "$GITHUB_REF_NAME" ]]; then
# The GITHUB_REF_NAME env variable is available in github actions.
git_branch=$GITHUB_REF_NAME
else
git_branch=$(git branch --show-current)
fi
echo "Current git branch is '${git_branch}'."

git config user.name github-actions
git config user.email [email protected]

git checkout gh-pages
git pull origin gh-pages

if [ "$git_branch" == "$main_git_branch" ]; then
site_dest="${gh_pages_root}"

# Create temporary backup for other branches content.
mv "${gh_pages_root}/branches" .

# Replace site files.
rm -rf "${site_dest}"
mkdir -p "${site_dest}"
cp -a -v ${site_src}/* ${site_dest}/

# Restore temporary backup for other branches content.
mv ./branches "${gh_pages_root}/"
else
site_dest="${gh_pages_root}/branches/$(slugify ${git_branch})"

# Replace site files.
rm -rf "${site_dest}"
mkdir -p "${site_dest}"
cp -a -v ${site_src}/* ${site_dest}/
fi

echo "Updating gh-pages branch."
git add --all
git commit --allow-empty -m "[$(date '+%F %T %Z')] Updated site for the '${git_branch}' branch [ci skip]"
git push --force origin gh-pages
echo "Deployment finished."
}

update_deployments_list() {
github_project_url=$(git remote get-url origin)
if [[ $github_project_url == [email protected]:* ]]; then
github_repo=$(echo ${github_project_url#"[email protected]:"} | sed 's/\.git$//g')
elif [[ $github_project_url == https://github.com/* ]]; then
github_repo=$(echo ${github_project_url#"https://github.com/"} | sed 's/\.git$//g' | sed 's/^\/\///g')
fi

github_repo_owner=$(echo "${github_repo}" | sed 's/\/.*$//g')
github_repo_name=$(echo "${github_repo}" | sed 's/^.*\///g')

deployments_list="DEPLOYMENTS.md"
echo "Updating ${deployments_list}"
rm $deployments_list

# Create a markdown table
touch $deployments_list
echo "# Deployments" >>$deployments_list
echo "" >>$deployments_list
echo "| Branch | Link |" >>$deployments_list
echo "| --- | --- |" >>$deployments_list

main_deployment_url="https://${github_repo_owner}.github.io/${github_repo_name}/"
echo "| [${main_git_branch}](https://github.com/${github_repo_owner}/${github_repo_name}/tree/${branch}) | [Open](${main_deployment_url}) |" >>$deployments_list

remote_branches=$( git ls-remote --heads origin | sed 's?.*refs/heads/??' | grep -v "gh-pages" | grep -v "${main_git_branch}")
echo "$remote_branches" | while IFS= read -r branch; do
safe_branch=$(slugify $branch)
deployment_url="https://${github_repo_owner}.github.io/${github_repo_name}/branches/${safe_branch}"
echo "| [${branch}](https://github.com/${github_repo_owner}/${github_repo_name}/tree/${branch}) | [Open](${deployment_url}) |" >>$deployments_list
done

# Update gh-pages branch
git add --all
git commit --allow-empty -m "Update ${deployments_list}"
git push --force origin gh-pages
}

deploy
update_deployments_list
31 changes: 11 additions & 20 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ name: CI
on:
# Triggers the workflow on push or pull request events but only for the hakyll branch
push:
branches: [ hakyll ]
# branches:
branches-ignore:
- gh-pages
pull_request:
branches: [ hakyll ]
branches-ignore:
- gh-pages

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
Expand All @@ -31,7 +34,6 @@ jobs:
- uses: actions/checkout@v2
with:
fetch-depth: 0
ref: hakyll

- uses: haskell/actions/setup@v1
name: Setup Haskell Stack
Expand All @@ -48,21 +50,10 @@ jobs:
- name: Build dependencies
run: stack build --system-ghc --only-dependencies

- name: Build site executable
run: stack build --system-ghc

# Runs a set of commands using the runners shell
- name: Deploy
- name: Build site
run: |
git config user.name github-actions
git config user.email [email protected]
stack exec --system-ghc site rebuild
git checkout main
git pull --rebase
# Overwrite existing files with new files
cp -a -v _site/. .
# Commit
git add --all
git commit -m "[`date '+%F %T %Z'`] New release [ci skip]"
# Push
git push origin main:main
stack build --system-ghc
stack exec --system-ghc site rebuild
- name: Deploy site
run: ./.github/workflows/deploy.sh
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ This repository is for the [haskell.foundation](https://haskell.foundation) webs
- [Table Of Contents](#table-of-contents)
- [Building](#building)
- [CI](#ci)
- [Deployment](#deployment)
- [PRs deployment](#prs-deployment)
- [License](#license)


## Building

To build the project:
Expand Down Expand Up @@ -50,6 +51,26 @@ The general steps are:
7. Copy the `_site` directory over the `main` branch contents
8. Commit and push the site contents to the `main` branch.

## Deployment

[Available Deployments](https://github.com/haskellfoundation/haskellfoundation.github.io/blob/gh-pages/DEPLOYMENTS.md)

Deployment is automated for branches in the original repository.

### PRs deployment

When you are submitting a PR, it's a good practice to provide a link to a running website demo.

First you should enable GitHub pages for you forked repository.

<img width="949" alt="Screen Shot 2021-12-29 at 10 28 32 PM" src="https://user-images.githubusercontent.com/9302460/147704755-d9bc8c08-7272-4c55-b88f-34b3aefd0c1e.png">

Then you should manually trigger a build for your branch in your forker repository.

<img width="988" alt="Screen Shot 2021-12-29 at 10 25 19 PM" src="https://user-images.githubusercontent.com/9302460/147704589-8bce2b51-cedc-4e8a-9aec-33574b2d2c02.png">

At first time it can take a while because there is no cache for Hakyll dependencies at your GitHub actions runner yet. You can attach a link to running CI job to the PR and go drink coffee.

## License

This site is open source, and covered under the Apache 2.0 license.
4 changes: 2 additions & 2 deletions donations/sponsors/flipstone.markdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: FlipStone
logo: /assets/images/sponsors/flipstone/flipstone-683.png
srcset: /assets/images/sponsors/flipstone/flipstone-200.png 200w, /assets/images/sponsors/flipstone/flipstone-400.png 400w, /assets/images/sponsors/flipstone/flipstone-683.png 683w
logo: ./assets/images/sponsors/flipstone/flipstone-683.png
srcset: ./assets/images/sponsors/flipstone/flipstone-200.png 200w, ./assets/images/sponsors/flipstone/flipstone-400.png 400w, ./assets/images/sponsors/flipstone/flipstone-683.png 683w
externalUrl: https://flipstone.com/
level: Functor
---
4 changes: 2 additions & 2 deletions donations/sponsors/github.markdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: GitHub
logo: /assets/images/sponsors/github/github-683.png
srcset: /assets/images/sponsors/github/github-200.png 200w, /assets/images/sponsors/github/github-400.png 400w, /assets/images/sponsors/github/github-683.png 683w
logo: ./assets/images/sponsors/github/github-683.png
srcset: ./assets/images/sponsors/github/github-200.png 200w, ./assets/images/sponsors/github/github-400.png 400w, ./assets/images/sponsors/github/github-683.png 683w
externalUrl: https://github.com/
level: Monad
---
4 changes: 2 additions & 2 deletions donations/sponsors/iohk.markdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: IOHK
logo: /assets/images/sponsors/iohk/iohk-683.png
srcset: /assets/images/sponsors/iohk/iohk-200.png 200w, /assets/images/sponsors/iohk/iohk-400.png 400w, /assets/images/sponsors/iohk/iohk-683.png 683w
logo: ./assets/images/sponsors/iohk/iohk-683.png
srcset: ./assets/images/sponsors/iohk/iohk-200.png 200w, ./assets/images/sponsors/iohk/iohk-400.png 400w, ./assets/images/sponsors/iohk/iohk-683.png 683w
externalUrl: https://iohk.io/
level: Monad
---
4 changes: 2 additions & 2 deletions donations/sponsors/obsidian.markdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Obsidian Systems
logo: /assets/images/sponsors/obsidian-systems/obsidian-systems-683.png
srcset: /assets/images/sponsors/obsidian-systems/obsidian-systems-200.png 200w, /assets/images/sponsors/obsidian-systems/obsidian-systems-400.png 400w, /assets/images/sponsors/obsidian-systems/obsidian-systems-683.png 683w
logo: ./assets/images/sponsors/obsidian-systems/obsidian-systems-683.png
srcset: ./assets/images/sponsors/obsidian-systems/obsidian-systems-200.png 200w, ./assets/images/sponsors/obsidian-systems/obsidian-systems-400.png 400w, ./assets/images/sponsors/obsidian-systems/obsidian-systems-683.png 683w
externalUrl: https://obsidian.systems/
level: Applicative
---
4 changes: 2 additions & 2 deletions donations/sponsors/tweag.markdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Tweag
logo: /assets/images/sponsors/tweag/tweag-683.png
srcset: /assets/images/sponsors/tweag/tweag-200.png 200w, /assets/images/sponsors/tweag/tweag-400.png 400w, /assets/images/sponsors/tweag/tweag-683.png 683w
logo: ./assets/images/sponsors/tweag/tweag-683.png
srcset: ./assets/images/sponsors/tweag/tweag-200.png 200w, ./assets/images/sponsors/tweag/tweag-400.png 400w, ./assets/images/sponsors/tweag/tweag-683.png 683w
externalUrl: https://tweag.io/
level: Applicative
---
4 changes: 2 additions & 2 deletions donations/sponsors/welltyped.markdown
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Well-Typed
logo: /assets/images/sponsors/well-typed/well-typed-683.png
srcset: /assets/images/sponsors/well-typed/well-typed-200.png 200w, /assets/images/sponsors/well-typed/well-typed-400.png 400w, /assets/images/sponsors/well-typed/well-typed-683.png 683w
logo: ./assets/images/sponsors/well-typed/well-typed-683.png
srcset: ./assets/images/sponsors/well-typed/well-typed-200.png 200w, ./assets/images/sponsors/well-typed/well-typed-400.png 400w, ./assets/images/sponsors/well-typed/well-typed-683.png 683w
externalUrl: https://well-typed.com/
level: Applicative
---

0 comments on commit e685013

Please sign in to comment.