Skip to content

contrib

contrib #966

Workflow file for this run

name: contrib
on:
schedule:
- cron: '15 3 * * *'
workflow_dispatch:
permissions:
contents: write # to update _contrib
pull-requests: write # to send the updated _contrib PRs
jobs:
update-contrib:
name: Update _contrib
runs-on: ubuntu-latest
steps:
- name: Checkout website
uses: actions/checkout@v7
with:
persist-credentials: false
- name: Checkout hyper
uses: actions/checkout@v7
with:
persist-credentials: false
repository: hyperium/hyper
path: hyper
- name: Copy CONTRIBUTING.md into docs
run: |
sed -i -e 's|./docs/||g' hyper/CONTRIBUTING.md
cp -a hyper/CONTRIBUTING.md hyper/docs/CONTRIBUTING.md
- name: Generate HIP index
run: |
index=hyper/docs/hips/index.md
printf '# hyper Improvement Proposals\n\n' > "$index"
for f in hyper/docs/hips/[0-9][0-9][0-9][0-9]-*.md; do
if [[ "$(basename "$f")" == '0000-template.md' ]]; then
continue
fi
title=$(sed -n '1s/^# //p' "$f")
path=$(basename "$f" .md)
printf -- '- [%s](./%s/)\n' "$title" "$path" >> "$index"
done
# Insert frontmatter borders, replace markdown header with
# frontmatter title and insert:
# - layout: guide
# - hyper_path: {path}
- name: Convert doc titles to frontmatter
run: |
find hyper/docs -mindepth 1 -maxdepth 2 -type f -name '*.md' -print0 |
while IFS= read -r -d '' f; do
sed -i -e '1i ---' \
-e '1s/^# /title: >-\n /' \
-e '2i layout: guide' \
-e "2i hyper_path: ${f#hyper/}" \
-e '2i ---' "$f"
done
# CONTRIBUTING.md is uniquely copied into the docs folder.
# This adjustment links the correct source file.
- name: Retain correct CONTRIBUTING.md path
run: |
sed -i -e '4s/docs\///' hyper/docs/CONTRIBUTING.md
# Use the hyper docs readme as the index page of contrib,
# and insert permalink: /contrib/ in the frontmatter
- name: Convert readme to index
run: |
sed -i -e '4i permalink: /contrib/' hyper/docs/README.md
mv hyper/docs/README.md hyper/docs/index.md
sed -i -e '/^hyper_path:/d' hyper/docs/hips/index.md
sed -i -e '4i permalink: /contrib/hips/' hyper/docs/hips/index.md
# Lowercase the internal links and replace underscores with
# hyphens, so they will point to the correct file.
- name: Lowercase internal links
run: |
mapfile -d '' markdown_files < <(
find hyper/docs -mindepth 1 -maxdepth 2 -type f -name '*.md' -print0
)
for filename in "${markdown_files[@]}"; do
# since we move some docs from hyper root into the docs folder,
# fix links to them
if [[ "$filename" != hyper/docs/hips/* ]]; then
sed -i -e 's|\.\./|\./|g' "$filename"
fi
# cut `.md` from the filename before search and replace
filename=${filename::-3};
for file in "${markdown_files[@]}"; do
# filename without parent path
filename=${filename##*/}
# don't lowercase MSRV
if [[ "${filename}" == 'MSRV' ]]; then
continue
fi
# lowercase filenames outside frontmatter
sed -i -e "1,/^---$/!s|${filename}|${filename,,}|g" "$file"
# match on the lowercased filename from here on
lowercased=${filename,,}
hyphenated=${lowercased//_/-}
# replace underscores in internal links with hyphens
sed -i -e "s|${lowercased}|${hyphenated}|g" "$file"
done
done
- name: Lowercase filenames and replace underscores
run: |
find hyper/docs -mindepth 1 -maxdepth 2 -type f -print0 |
while IFS= read -r -d '' f; do
directory=$(dirname "$f")
filename=$(basename "$f" | tr '[:upper:]' '[:lower:]' | tr '_' '-')
mv -vn "$f" "$directory/$filename" || true
done
- name: Copy the hyper docs to contrib
run: |
mkdir -p _contrib
cp -a hyper/docs/. _contrib/
- uses: gr2m/create-or-update-pull-request-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
author: github-actions <github-actions@github.com>
branch: actions/update-contrib
title: 'doc: update contrib docs'
body: >
The _contrib docs are likely out of date. This is an automatically
generated PR by the `contrib.yml` GitHub workflow, which clones the docs
from the main repo, implements the changes in _contrib then submits a new
PR or updates an existing PR.
commit-message: 'doc: update contrib docs'
path: _contrib/