diff --git a/docs/deployment.md b/docs/deployment.md index 25aed666a..aa8b36300 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -41,10 +41,38 @@ site: ::: +:::{tip} Ignore the `_build` folder in Git +:class: dropdown + +If you are using Git, add the `_build` folder to your `.gitignore` so that it is not tracked. This folder contains auto-generated assets that can easily be re-built -- for example in a Continuous Integration system like GitHub Actions. +::: + ## Deploying to GitHub Pages -There are a few changes that need to be added to make this work for GitHub pages, which hosts your project in a folder, which is your repositories name, for example:\ +GitHub Pages[^pages] allows you to host your project in a folder, which is your repositories name, for example:\ `https://owner.github.io/repository_name`\ +To get setup with GitHub Pages, ensure that your repository is hosted in GitHub and you are in the root of the Git repository. + +🛠 In the root of your git repository run `myst init --gh-pages` + +The command will ask you questions about which branch to deploy from (e.g. `main`) and the name of the GitHub Action (e.g. `deploy.yml`). It will then create a GitHub Action[^actions] that will run next time you push your code to the main branch you specified. + +:::{figure} ./images/myst-init-gh-pages.png +:class: framed +The command `myst init --gh-pages` will guide you through deploying to GitHub Pages. +::: + +[^actions]: To learn more about GitHub Actions, see the [GitHub documentation](https://docs.github.com/en/actions/quickstart). These are YAML files created in the `.github/workflows` folder in the root of your repository. +[^pages]: To learn more about GitHub Pages, see the [GitHub documentation](https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages) + +Navigate to your repository settings, click on Pages and enable GitHub pages. When choosing the source, use `GitHub Actions`: + +🛠 Turn on GitHub Pages using **GitHub Actions** as the source. + +To trigger action, push your code with the workflow to main. + +:::{tip} `BASE_URL` environment variable +:class: dropdown The build and site assets are in the `/build` folder, which would point outside of the current repository to a repository called 'build', which probably doesn't exist! To fix this, we can change the base url that the site is mounted to, which can be done through the `BASE_URL` environment variable: @@ -53,37 +81,57 @@ To fix this, we can change the base url that the site is mounted to, which can b export BASE_URL="/repository_name" ``` -The base URL is absolute and should not end with a trailing slash. This can be done automatically in a GitHub Action by looking to the `github.event.repository.name` variable. +The base URL is _absolute_ and should not end with a trailing slash. This can be done automatically in a GitHub Action by looking to the `github.event.repository.name` variable. +::: -:::{tip} Using GitHub Actions +:::{note} Full GitHub Action :class: dropdown -You can use GitHub actions to build and deploy your site automatically when you merge new documents, for example. +The GitHub Action to build and deploy your site automatically is: ```yaml -name: MyST Deploy +name: MyST GitHub Pages Deploy on: push: + # Runs on pushes targeting the default branch branches: [main] env: BASE_URL: /${{ github.event.repository.name }} + +# 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: deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v3 + - uses: actions/setup-node@v3 with: node-version: 18.x - - name: Install MyST + - name: Install MyST Markdown run: npm install -g mystmd - name: Build HTML Assets run: myst build --html - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./_build/html + path: './_build/html' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 ``` ::: diff --git a/docs/images/myst-init-gh-pages.png b/docs/images/myst-init-gh-pages.png new file mode 100644 index 000000000..3d9ed3838 Binary files /dev/null and b/docs/images/myst-init-gh-pages.png differ diff --git a/docs/installing.md b/docs/installing.md index f7566114c..44eb6644b 100644 --- a/docs/installing.md +++ b/docs/installing.md @@ -14,10 +14,6 @@ The MyST Markdown Command Line Interface (CLI) is available through [NodeJS](./i npm install -g mystmd ``` -:::{danger} Do not use `myst-cli`! -In July 2023, we renamed the package and website to `mystmd` from `myst-cli`. Installing `myst-cli` will no longer create a `myst` command from your terminal. -::: - ```{important} Installing Node If you do not have `npm` installed you can look at our how to guide for [Installing NodeJS](./installing-prerequisites.md). If you have any challenges installing, please [open an issue here](https://github.com/executablebooks/mystmd/issues). diff --git a/docs/quickstart.md b/docs/quickstart.md index 022e0d0b3..3b7ad5ac8 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -69,6 +69,16 @@ npm install -g mystmd If you have any problems, see [installing MyST](./installing.md) and or [open an issue here](https://github.com/executablebooks/mystmd/issues/new?assignees=&labels=bug&template=bug_report.yml). 🐛 +:::{danger} Note: `myst-cli` is deprecated +:class: dropdown +In July 2023, we renamed the package to `mystmd` from `myst-cli`. Installing `myst-cli` will no longer create a `myst` command from your terminal. You can uninstall `myst-cli` using: + +```bash +npm uninstall -g myst-cli +``` + +::: + :::{note} :class: dropdown **Updating MyST**