Skip to content

consider refactoring the interpolate data section of the prepbufr builder to see if we can appropriately reduce the levels of nesting. #2

consider refactoring the interpolate data section of the prepbufr builder to see if we can appropriately reduce the levels of nesting.

consider refactoring the interpolate data section of the prepbufr builder to see if we can appropriately reduce the levels of nesting. #2

Workflow file for this run

name: ADR Accepted
on:
issues:
types:
- closed
jobs:
main:
name: Create ADR
runs-on: ubuntu-latest
# Only run this workflow if the closed issue has the "ADR: accepted" label
if: "${{ contains(github.event.issue.labels.*.name, 'ADR: accepted') }}"
steps:
- name: checkout main branch
uses: actions/checkout@v4
with:
ref: main
- name: get ADR number
id: next
run: |
LAST_ADR=$(ls docs/decisions/architecture/*.md | grep -Eo "architecture/adr-[0-9]+-" | sort | tail -n1 | grep -Eo "[0-9]+")
LAST_ADR=$(echo "$LAST_ADR" | sed -E 's/^0+//')
NEXT_ADR=$(($LAST_ADR + 1))
NEXT_ADR=$(printf "%04i" "$NEXT_ADR")
echo "number=$NEXT_ADR" >> "$GITHUB_OUTPUT"
- name: write the ADR
id: create-adr
uses: actions/github-script@v7
with:
script: |
const fs = require("fs/promises");
// Use the GitHub toJSON expression to get these as escaped strings.
// In Javascript, this will preserve line breaks, and using template
// strings further down will preserve all the kinds of quotes.
const title = ${{ toJSON(github.event.issue.title) }};
const body = ${{ toJSON(github.event.issue.body )}};
const slug = title
.toLowerCase()
.trim()
.replace(/[^\w\s-]/g, "") // get rid of non-ascii characters
.replace(/[\s_-]+/g, "-") // convert whitespace and underscore to dash
.replace(/^-+|-+$/g, ""); // git rid of leading/trailing dashes
const filename = `docs/decisions/architecture/adr-${{ steps.next.outputs.number }}-${slug}.md`;
// Get the current date as an ISO8601 string, split at the timestamp,
// and only keep the date portion.
const [date] = new Date().toISOString().split("T");
const adr = `# ${ title }
Date: ${ date }
### Status
Accepted
${ body }
`;
# Set outputs for the next step to use
core.setOutput('filename', filename);
core.setOutput('adr', adr);
await fs.writeFile(filename, adr, { encoding: 'utf-8' });
- name: branch, commit, and open PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
BRANCH="adr-auto-${{ steps.next.outputs.number }}"
git config --global user.email "[email protected]"
git config --global user.name "GSL Verification team ADR automation"
# Check if the branch already exists, exit-code 2 means it doesn't, and that creating a new branch is safe.
set +e # override set -e since we're hoping for an exit code
git ls-remote --exit-code --heads origin refs/heads/$BRANCH > /dev/null
branch_exists=$?
set -e
if [ $branch_exists -eq 2 ]; then
git checkout -b $BRANCH
git add docs/decisions/architecture/*.md
git commit -m "add ADR ${{ steps.next.outputs.number }}: ${{ github.event.issue.title }}"
git push -f origin $BRANCH
gh pr create \
--title "Add ADR ${{ steps.next.outputs.number }} to the repo" \
--label "ADR" \
--body "This pull request was opened automatically because #${{ github.event.issue.number }} was closed after being marked as an approved ADR. It contains a markdown file capturing the ADR body at the time the issue was closed. Please verify that the markdown is correct before merging!" || true
else
echo "Error - Branch $BRANCH already exists, PR will need to be created manually. ADR text is below. Exiting."
echo " --- "
echo "Filename: ${{ steps.create-adr.outputs.filename }}"
echo " --- Start File --- "
echo "${{ steps.create-adr.outputs.adr }}"
echo " --- End File --- "
# Create a step summary
echo "# Error" >> $GITHUB_STEP_SUMMARY
echo "Branch $BRANCH already exists, PR will need to be created manually. ADR contents are below. Exiting." >> $GITHUB_STEP_SUMMARY
echo "## Filename" >> $GITHUB_STEP_SUMMARY
echo "\`${{ steps.create-adr.outputs.filename }}\`" >> $GITHUB_STEP_SUMMARY
echo "## ADR Contents" >> $GITHUB_STEP_SUMMARY
echo "${{ steps.create-adr.outputs.adr }}" >> $GITHUB_STEP_SUMMARY
exit 1
fi