mirror of
https://github.com/cupcakearmy/memoir.git
synced 2025-09-05 23:40:41 +00:00
feat: init
This commit is contained in:
3
docs/infrastructure/_category_.json
Normal file
3
docs/infrastructure/_category_.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"label": "Infrastructure"
|
||||
}
|
3
docs/infrastructure/github-actions/_category_.json
Normal file
3
docs/infrastructure/github-actions/_category_.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"label": "Github Actions"
|
||||
}
|
116
docs/infrastructure/github-actions/composite-actions.md
Normal file
116
docs/infrastructure/github-actions/composite-actions.md
Normal file
@@ -0,0 +1,116 @@
|
||||
---
|
||||
tags:
|
||||
- Github Actions
|
||||
- DRY
|
||||
---
|
||||
|
||||
# Composite Actions
|
||||
|
||||
Often we reuse `steps` inside our different github actions. As we generally want to follow [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) principles (and are lazy), which means every duplicated step has potential for improvement.
|
||||
|
||||
> There is also a [good guide/tutorial by James Wallis](https://wallis.dev/blog/composite-github-actions), which this is mainly inspired by.
|
||||
|
||||
## Composite Actions vs Reusable Workflows
|
||||
|
||||
Within Github actions there are two ways to achieve that: **Composite Actions** and **Reusable Workflows**. Here is a [good comparison by cardinalby](https://cardinalby.github.io/blog/post/github-actions/dry-reusing-code-in-github-actions/).
|
||||
|
||||
## Key Points of Composite Actions
|
||||
|
||||
- Can live in the same repository, but can also be outsourced into it's own.
|
||||
- Share the same filesystem -> no build artifacts need to be passed around.
|
||||
- Secrets cannot be accessed directly, need to be passed.
|
||||
- Each action has to have it's own directory with an `action.yaml` file inside it.
|
||||
- When executing raw commands we need to specify the `shell` we are running in.
|
||||
|
||||
## Example
|
||||
|
||||
The example will show how to extract a part of a github action to a composite action. In this case: building some LaTeX files.
|
||||
|
||||
```
|
||||
.github/
|
||||
├── actions
|
||||
│ └── build
|
||||
│ └── action.yaml
|
||||
└── workflows
|
||||
├── preview.yml
|
||||
└── release.yml
|
||||
```
|
||||
|
||||
```yaml
|
||||
name: 'Latex Builder'
|
||||
description: 'Checkout and build LaTeX files.'
|
||||
|
||||
inputs:
|
||||
# As we cannot access secrets directly, they must be passed
|
||||
github-token:
|
||||
description: 'GitHub token for authentication.'
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: 'composite' # This is the magic
|
||||
steps:
|
||||
- uses: actions/cache@v3
|
||||
name: Tectonic Cache
|
||||
with:
|
||||
path: ~/.cache/Tectonic
|
||||
key: ${{ runner.os }}-tectonic-${{ hashFiles('**/*.tex') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-tectonic-
|
||||
- uses: wtfjoke/setup-tectonic@v2
|
||||
with:
|
||||
github-token: ${{ inputs.github-token }}
|
||||
- name: Run Tectonic
|
||||
run: make tectonic
|
||||
shell: bash # This would not be required in the normal action file
|
||||
```
|
||||
|
||||
```yaml
|
||||
name: 'Preview'
|
||||
|
||||
on:
|
||||
# ...
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: ./.github/actions/build
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Upload PDFs
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: PDFs
|
||||
path: '*.pdf'
|
||||
```
|
||||
|
||||
```yaml
|
||||
name: 'Release'
|
||||
|
||||
on:
|
||||
# ...
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: ./.github/actions/build
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
artifacts: '*.pdf'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
## Gotchas
|
||||
|
||||
- If we use a local composite action, the `actions/checkout@v3` step cannot be inside the composite action, as the step itself is inside the repository, so it does not exist yet in the run.
|
63
docs/infrastructure/github-actions/github-pages.md
Normal file
63
docs/infrastructure/github-actions/github-pages.md
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
tags:
|
||||
- Github Actions
|
||||
- Pages
|
||||
- Static Site
|
||||
---
|
||||
|
||||
# Github Pages with Actions
|
||||
|
||||
Publish static sites to Github Pages using Actions.
|
||||
|
||||
## Example
|
||||
|
||||
The example uses `docs` as the built folder containing the static site.
|
||||
|
||||
```yaml
|
||||
name: Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: 'pages'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Build some static assets
|
||||
|
||||
- uses: actions/configure-pages@v3
|
||||
- uses: actions/upload-pages-artifact@v1
|
||||
with:
|
||||
path: './docs'
|
||||
- id: deployment
|
||||
uses: actions/deploy-pages@v1
|
||||
```
|
||||
|
||||
## Path prefix
|
||||
|
||||
Note that we require a path to be set as github pages are published as: `https://<username>.github.io/<repo>/`
|
||||
|
||||
### Vite
|
||||
|
||||
For vite you can set it with the [base option](https://vitejs.dev/config/shared-options.html#base).
|
||||
|
||||
```bash
|
||||
vite build --emptyOutDir --base=./
|
||||
```
|
@@ -0,0 +1,8 @@
|
||||
---
|
||||
id: publish-npm-github-action
|
||||
tags:
|
||||
- Github Actions
|
||||
- NPM
|
||||
---
|
||||
|
||||
# Publish NPM package with Github Action
|
Reference in New Issue
Block a user