diff --git a/.github/actions/download-artifact/action.yml b/.github/actions/download-artifact/action.yml new file mode 100644 index 0000000..4a49a88 --- /dev/null +++ b/.github/actions/download-artifact/action.yml @@ -0,0 +1,31 @@ +name: Download artifact +description: Wrapper around GitHub's official action, with additional extraction before download + +# https://github.com/actions/download-artifact/blob/main/action.yml +inputs: + name: + description: Artifact name + required: true + path: + description: Destination path + required: false + default: . + +runs: + using: composite + steps: + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + name: ${{ inputs.name }} + path: ${{ inputs.path }} + + - name: Extract artifacts + run: tar -xvf ${{ inputs.name }}.tar + shell: bash + working-directory: ${{ inputs.path }} + + - name: Remove archive + run: rm -f ${{ inputs.name }}.tar + shell: bash + working-directory: ${{ inputs.path }} diff --git a/.github/actions/upload-artifact/action.yml b/.github/actions/upload-artifact/action.yml new file mode 100644 index 0000000..16b2a02 --- /dev/null +++ b/.github/actions/upload-artifact/action.yml @@ -0,0 +1,46 @@ +name: Upload artifact +description: Wrapper around GitHub's official action, with additional archiving before upload + +# https://github.com/actions/upload-artifact/blob/main/action.yml +inputs: + name: + description: Artifact name + required: true + path: + description: One or more files, directories or wildcard pattern that describes what to upload + required: true + if-no-files-found: + description: > + The desired behavior if no files are found using the provided path. + Available Options: + warn: Output a warning but do not fail the action + error: Fail the action with an error message + ignore: Do not output any warnings or errors, the action does not fail + required: false + default: warn + retention-days: + description: > + Duration after which artifact will expire in days. 0 means using default retention. + Minimum 1 day. + Maximum 90 days unless changed from the repository settings page. + required: false + default: '0' + +runs: + using: composite + steps: + - name: Archive artifacts + run: tar -hcvf ${{ inputs.name }}.tar $(echo "${{ inputs.path }}" | tr '\n' ' ') + shell: bash + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + if-no-files-found: ${{ inputs.if-no-files-found }} + name: ${{ inputs.name }} + path: ${{ inputs.name }}.tar + retention-days: ${{ inputs.retention-days }} + + - name: Remove archive + run: rm -f ${{ inputs.name }}.tar + shell: bash \ No newline at end of file diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml new file mode 100644 index 0000000..de21e46 --- /dev/null +++ b/.github/workflows/deployment.yml @@ -0,0 +1,72 @@ +name: Deploy + +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [main, release**] + pull_request: + branches: [main, release**] + # Don't run on draft PR's, see: https://github.com/orgs/community/discussions/25722#discussioncomment-3248917 + types: [opened, synchronize, reopened, ready_for_review] + # Allows us to run the 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: + generate-doc-options: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + + - run: nix build .#docs + + - run: nix run .#hugo + + - name: Store hugo + uses: ./.github/actions/upload-artifact + with: + name: hugo + path: ./hugo/public + + deploy-docs: + needs: generate-doc-options + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Get nix build output + uses: ./.github/actions/download-artifact + with: + name: hugo + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Upload GH pages artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './hugo/public' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2