From a02967b6fd7a944a439878c1ca57d4df531f60c4 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 10:19:00 +0200 Subject: [PATCH 01/16] Create publish.yml --- .github/workflows/publish.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..11378d5 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,32 @@ +name: Publish your documentation + +on: + push: + branches: + - dev + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '14' + registry-url: https://registry.npmjs.org/ + + - name: Install and publish + run: | + startClean="" + # Check on which branch it is running + if [[ ${GITHUB_REF} == "refs/heads/main" ]]; then + startClean="--cleanStart --confirm" + fi + + # Install doctor + npm i @estruyf/doctor -g + + # Start doctor publish + doctor publish --auth password --username "${{ secrets.USERNAME }}" --password "${{ secrets.PASSWORD }}" -u "${{ secrets.SITEURL }}" $startClean From d4f32a2ca79285e84e24553f2dd355933e417e4e Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 10:26:58 +0200 Subject: [PATCH 02/16] Update publish.yml --- .github/workflows/publish.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 11378d5..9095b9c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,8 +3,7 @@ name: Publish your documentation on: push: branches: - - dev - - main + - master jobs: build: From 551924c47803e9013070a13c1cabb6064c1a1002 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 10:47:55 +0200 Subject: [PATCH 03/16] Update publish.yml --- .github/workflows/publish.yml | 39 +++++++++++------------------------ 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9095b9c..051467d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,31 +1,16 @@ -name: Publish your documentation - -on: - push: - branches: - - master - +name: Build and Deploy +on: [push] +permissions: + contents: write jobs: - build: + build-and-deploy: + concurrency: ci-${{ github.ref }} # Recommended if you intend to make multiple deployments in quick succession. runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: '14' - registry-url: https://registry.npmjs.org/ - - - name: Install and publish - run: | - startClean="" - # Check on which branch it is running - if [[ ${GITHUB_REF} == "refs/heads/main" ]]; then - startClean="--cleanStart --confirm" - fi - - # Install doctor - npm i @estruyf/doctor -g + - name: Checkout 🛎️ + uses: actions/checkout@v3 - # Start doctor publish - doctor publish --auth password --username "${{ secrets.USERNAME }}" --password "${{ secrets.PASSWORD }}" -u "${{ secrets.SITEURL }}" $startClean + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: docs/build # The folder the action should deploy. From 0ff34bf4aa5e3237b05879bf85f97015e3ac4e82 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 10:54:54 +0200 Subject: [PATCH 04/16] Delete publish-pypi.yml --- .github/workflows/publish-pypi.yml | 39 ------------------------------ 1 file changed, 39 deletions(-) delete mode 100644 .github/workflows/publish-pypi.yml diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml deleted file mode 100644 index 2413f97..0000000 --- a/.github/workflows/publish-pypi.yml +++ /dev/null @@ -1,39 +0,0 @@ -# This workflow will upload a Python Package using flit when a release is -# created. For more information see: -# https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries - -name: PyPI upload - -on: - release: - types: [created] - -jobs: - publish_pypi: - name: Publish package to PyPI - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.x' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install wheel twine setuptools - - - name: Build and publish - env: - TWINE_USERNAME: __token__ - # The PYPI_PASSWORD must be a pypi token with the "pypi-" prefix with sufficient permissions to upload this package - # https://pypi.org/help/#apitoken - TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} - run: | - python setup.py sdist bdist_wheel - twine upload dist/* From 30538967e4004470fad94eec10f8d778e30d0aeb Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:24:06 +0200 Subject: [PATCH 05/16] Update publish.yml --- .github/workflows/publish.yml | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 051467d..863d3b8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,16 +1,24 @@ -name: Build and Deploy -on: [push] +name: Docs +on: [push, pull_request, workflow_dispatch] permissions: - contents: write + contents: write jobs: - build-and-deploy: - concurrency: ci-${{ github.ref }} # Recommended if you intend to make multiple deployments in quick succession. + docs: runs-on: ubuntu-latest steps: - - name: Checkout 🛎️ - uses: actions/checkout@v3 - - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v3 + - name: Install dependencies + run: | + pip install sphinx sphinx_rtd_theme + - name: Sphinx build + run: | + sphinx-build doc _build + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} with: - folder: docs/build # The folder the action should deploy. + publish_branch: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/build/ + force_orphan: true From 8a36bcc7cfcba60348f13e14660925eb228fc2ab Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:24:23 +0200 Subject: [PATCH 06/16] Update publish.yml --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 863d3b8..baac22a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,7 +18,7 @@ jobs: uses: peaceiris/actions-gh-pages@v3 if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} with: - publish_branch: gh-pages + publish_branch: master github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: docs/build/ force_orphan: true From 22adf86f51ede912bb04e7d1697374a6bee58edb Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:28:00 +0200 Subject: [PATCH 07/16] Update publish.yml --- .github/workflows/publish.yml | 50 ++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index baac22a..6f61274 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,24 +1,32 @@ -name: Docs -on: [push, pull_request, workflow_dispatch] -permissions: - contents: write +name: Publish your documentation + +on: + push: + branches: + - dev + - main + jobs: - docs: + build: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 - - name: Install dependencies - run: | - pip install sphinx sphinx_rtd_theme - - name: Sphinx build - run: | - sphinx-build doc _build - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - with: - publish_branch: master - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/build/ - force_orphan: true + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '14' + registry-url: https://registry.npmjs.org/ + + - name: Install and publish + run: | + startClean="" + # Check on which branch it is running + if [[ ${GITHUB_REF} == "refs/heads/main" ]]; then + startClean="--cleanStart --confirm" + fi + + # Install doctor + npm i @estruyf/doctor -g + + # Start doctor publish + doctor publish --auth password --username "${{ secrets.USERNAME }}" --password "${{ secrets.PASSWORD }}" -u "${{ secrets.SITEURL }}" $startClean From 28f10e1b6996d1e85aa44117ba3524e35bad4712 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:28:21 +0200 Subject: [PATCH 08/16] Update publish.yml --- .github/workflows/publish.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6f61274..21f53f6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,8 +3,7 @@ name: Publish your documentation on: push: branches: - - dev - - main + - master jobs: build: From 29afc8519244c00bd7edd393a5785b5bc5d98820 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:31:09 +0200 Subject: [PATCH 09/16] Update publish.yml --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 21f53f6..8353b16 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -28,4 +28,4 @@ jobs: npm i @estruyf/doctor -g # Start doctor publish - doctor publish --auth password --username "${{ secrets.USERNAME }}" --password "${{ secrets.PASSWORD }}" -u "${{ secrets.SITEURL }}" $startClean + doctor deploy --auth password --username "${{ secrets.USERNAME }}" --password "${{ secrets.PASSWORD }}" -u "${{ secrets.SITEURL }}" $startClean --built-docs docs/build/html . From f5bf07343c2c89625340eb37633e64a9f3170863 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:31:36 +0200 Subject: [PATCH 10/16] Update publish.yml --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8353b16..7515fbb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,7 +20,7 @@ jobs: run: | startClean="" # Check on which branch it is running - if [[ ${GITHUB_REF} == "refs/heads/main" ]]; then + if [[ ${GITHUB_REF} == "refs/heads/master" ]]; then startClean="--cleanStart --confirm" fi From 28bd271cc58433d8541bbcb49cc3810072fdfebe Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:46:19 +0200 Subject: [PATCH 11/16] Delete publish.yml --- .github/workflows/publish.yml | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 7515fbb..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Publish your documentation - -on: - push: - branches: - - master - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: '14' - registry-url: https://registry.npmjs.org/ - - - name: Install and publish - run: | - startClean="" - # Check on which branch it is running - if [[ ${GITHUB_REF} == "refs/heads/master" ]]; then - startClean="--cleanStart --confirm" - fi - - # Install doctor - npm i @estruyf/doctor -g - - # Start doctor publish - doctor deploy --auth password --username "${{ secrets.USERNAME }}" --password "${{ secrets.PASSWORD }}" -u "${{ secrets.SITEURL }}" $startClean --built-docs docs/build/html . From 463ba460fd2633a9bf6b6327bd417ef921889fb6 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:53:42 +0200 Subject: [PATCH 12/16] Update docs.yml --- .github/workflows/docs.yml | 81 +++++++++++++++----------------------- 1 file changed, 31 insertions(+), 50 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a19c69a..b057036 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,52 +1,33 @@ name: Build Documentation -on: - push: - pull_request: - -jobs: - build_docs: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10"] - fail-fast: false - - defaults: - run: - shell: bash -l {0} - - steps: - - name: Set env vars - run: | - export REPOSITORY_NAME=${GITHUB_REPOSITORY#*/} # just the repo, as opposed to org/repo - echo "REPOSITORY_NAME=${REPOSITORY_NAME}" >> $GITHUB_ENV - - - name: Checkout the code - uses: actions/checkout@v3 - with: - fetch-depth: 1000 # should be enough to reach the most recent tag - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install documentation-building requirements - run: | - # For reference: https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html. - set -vxeuo pipefail - - # These packages are installed in the base environment but may be older - # versions. Explicitly upgrade them because they often create - # installation problems if out of date. - python -m pip install --upgrade pip setuptools numpy - - pip install . - pip install -r requirements-dev.txt - pip list - - - uses: actions/upload-artifact@v3 - with: - name: ${{ env.REPOSITORY_NAME }}-docs - path: docs/build/html/ +dist: jammy +language: python +python: + - 3.9 +cache: + directories: + - $HOME/.cache/pip + - $HOME/.ccache # https://github.com/travis-ci/travis-ci/issues/5853 +addons: + apt_packages: + - pandoc +env: + global: + # Doctr deploy key for twguest/phenom + - secure: "TOlAivoHFVW/FDn20vzidMO9UHG5dxMUJPWvqZHCmQr2H8vE+IX+FGoamyUcZ6XK1y7SdzOqHp0LpTbiry1QyToqsgfalTKignp95m8JSmX93IbotuvikSBbOxUzDhH9JOecxJxznFVHSuVyhBiWdWBKJrz1JI38dx4SqcI6fJQBVFsObf6T8/l1LseKgRjOqKJZGattw3T21y4rNQsSDkLkBWV/vN1Q1utcGMzTZmMHNHyBb6kpcnRsFraUfaaiyegZtwsU1zw3ruQGyI1DWhP6vlT/n255d33dS2coUnmThUJzGlXxovpAfiWXRsMcSfSCgI8hHJ+hyvjlWzCLPm1JJ4HkcBb5Tcvwg+8o0uIQjIC0/fAOrgkZeaKyhqThLNL9u8rOPmpQYHcIHrCClrhOdQi5qsgdowsISXDbSdCB1+ofW2nnXlDHAihlW9wEsDFsVYBlkVEXQ2uQ6SUzk5VW9efKxjUgi9mbCoB+15l+gp0QS5gZQDLMNdE6UgNcfFmfnE/otwqAiTWjNvkfAsCIMZ2JmPuti43HQKD9ffHoNXlUTbVzbFtSoR2aEWJb6z5WNWDBNqXz6Kj/M9G6iXwCnnhp35tB1EFtE9gSay7czccIqpD84cYGZkBzIzpkM0jCn2Y+s0IOSx+6k5mXGxAFQHdm4ucYAxGhOgPwi80=" +install: + # Install this package and the packages listed in requirements.txt. + - pip install . + - pip install ur + # Install extra requirements for running tests and building docs. + - pip install -r requirements-dev.txt + +script: + - coverage run -m pytest # Run the tests and check for test coverage. + - coverage report -m # Generate test coverage report. + - sudo apt install pandoc + - pip install pandoc + - pip install doctr + + - doctr deploy --built-docs docs/build/html . + From 795de7b985cfd8fa6fd4a52e823914ab31d0df42 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 11:54:41 +0200 Subject: [PATCH 13/16] Update docs.yml --- .github/workflows/docs.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b057036..cf6e242 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,5 +1,9 @@ name: Build Documentation +on: + pull_request: + push: + dist: jammy language: python python: From 641b19acb9a3fff5cb4e54ae19a8d3830baa2d6a Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 12:02:39 +0200 Subject: [PATCH 14/16] Create static.yml --- .github/workflows/static.yml | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000..1c2e111 --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,43 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["master"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: 'docs/build/html/' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 From 7e46664659744e3050552c85d46d804701585634 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 12:02:47 +0200 Subject: [PATCH 15/16] Delete docs.yml --- .github/workflows/docs.yml | 37 ------------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index cf6e242..0000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Build Documentation - -on: - pull_request: - push: - -dist: jammy -language: python -python: - - 3.9 -cache: - directories: - - $HOME/.cache/pip - - $HOME/.ccache # https://github.com/travis-ci/travis-ci/issues/5853 -addons: - apt_packages: - - pandoc -env: - global: - # Doctr deploy key for twguest/phenom - - secure: "TOlAivoHFVW/FDn20vzidMO9UHG5dxMUJPWvqZHCmQr2H8vE+IX+FGoamyUcZ6XK1y7SdzOqHp0LpTbiry1QyToqsgfalTKignp95m8JSmX93IbotuvikSBbOxUzDhH9JOecxJxznFVHSuVyhBiWdWBKJrz1JI38dx4SqcI6fJQBVFsObf6T8/l1LseKgRjOqKJZGattw3T21y4rNQsSDkLkBWV/vN1Q1utcGMzTZmMHNHyBb6kpcnRsFraUfaaiyegZtwsU1zw3ruQGyI1DWhP6vlT/n255d33dS2coUnmThUJzGlXxovpAfiWXRsMcSfSCgI8hHJ+hyvjlWzCLPm1JJ4HkcBb5Tcvwg+8o0uIQjIC0/fAOrgkZeaKyhqThLNL9u8rOPmpQYHcIHrCClrhOdQi5qsgdowsISXDbSdCB1+ofW2nnXlDHAihlW9wEsDFsVYBlkVEXQ2uQ6SUzk5VW9efKxjUgi9mbCoB+15l+gp0QS5gZQDLMNdE6UgNcfFmfnE/otwqAiTWjNvkfAsCIMZ2JmPuti43HQKD9ffHoNXlUTbVzbFtSoR2aEWJb6z5WNWDBNqXz6Kj/M9G6iXwCnnhp35tB1EFtE9gSay7czccIqpD84cYGZkBzIzpkM0jCn2Y+s0IOSx+6k5mXGxAFQHdm4ucYAxGhOgPwi80=" -install: - # Install this package and the packages listed in requirements.txt. - - pip install . - - pip install ur - # Install extra requirements for running tests and building docs. - - pip install -r requirements-dev.txt - -script: - - coverage run -m pytest # Run the tests and check for test coverage. - - coverage report -m # Generate test coverage report. - - sudo apt install pandoc - - pip install pandoc - - pip install doctr - - - doctr deploy --built-docs docs/build/html . - From 6442fdd6b5312de11038e5c42d7be2db66924859 Mon Sep 17 00:00:00 2001 From: Trey Guest Date: Mon, 10 Jul 2023 13:55:09 +0200 Subject: [PATCH 16/16] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2fa29bf..d1adfc2 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,9 @@ To check that your instillation has worked, open iPython and try:: ## Examples Phenom has been designed to require minimal knowledge of the XFEL process prior to generating your first pulse. -1. [Getting Started](https://github.com/twguest/phenom/blob/master/docs/build/html/notebooks/sase_model_pt1.ipynb) -2. [Tutorials](https://github.com/twguest/phenom/blob/master/docs/build/html/notebooks/sase_model_pt2.ipynb). -3. [Integrating with WPG](https://github.com/twguest/phenom/blob/master/docs/build/html/notebooks/phenom_to_wpg.ipynb). +1. [Getting Started](https://twguest.github.io/phenom/notebooks/sase_model_pt1.html) +2. [Tutorials](https://twguest.github.io/phenom/notebooks/sase_model_pt2.ipynb). +3. [Integrating with WPG](https://twguest.github.io/phenom/notebooks/phenom_to_wpg.ipynb). More details on generating these pulses can be found in the [documentation](https://twguest.github.io/phenom).