consider refactoring the interpolate data section of the prepbufr builder to see if we can appropriately reduce the levels of nesting. #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: SDR Accepted | |
on: | |
issues: | |
types: | |
- closed | |
jobs: | |
main: | |
name: Create SDR | |
runs-on: ubuntu-latest | |
# Only run this workflow if the closed issue has the "SDR: accepted" label | |
if: "${{ contains(github.event.issue.labels.*.name, 'SDR: accepted') }}" | |
steps: | |
- name: checkout main branch | |
uses: actions/checkout@v4 | |
with: | |
ref: main | |
- name: get SDR number | |
id: next | |
run: | | |
LAST_SDR=$(ls docs/decisions/scientific/*.md | grep -Eo "scientific/sdr-[0-9]+-" | sort | tail -n1 | grep -Eo "[0-9]+") | |
LAST_SDR=$(echo "$LAST_SDR" | sed -E 's/^0+//') | |
NEXT_SDR=$(($LAST_SDR + 1)) | |
NEXT_SDR=$(printf "%04i" "$NEXT_SDR") | |
echo "number=$NEXT_SDR" >> "$GITHUB_OUTPUT" | |
- name: write the SDR | |
id: create-sdr | |
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/scientific/sdr-${{ 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 sdr = `# ${ title } | |
Date: ${ date } | |
### Status | |
Accepted | |
${ body } | |
`; | |
# Set outputs for the next step to use | |
core.setOutput('filename', filename); | |
core.setOutput('sdr', sdr); | |
await fs.writeFile(filename, sdr, { encoding: 'utf-8' }); | |
- name: branch, commit, and open PR | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
BRANCH="sdr-auto-${{ steps.next.outputs.number }}" | |
git config --global user.email "[email protected]" | |
git config --global user.name "GSL Verification team SDR 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/scientific/*.md | |
git commit -m "add SDR ${{ steps.next.outputs.number }}: ${{ github.event.issue.title }}" | |
git push -f origin $BRANCH | |
gh pr create \ | |
--title "Add SDR ${{ steps.next.outputs.number }} to the repo" \ | |
--label "SDR" \ | |
--body "This pull request was opened automatically because #${{ github.event.issue.number }} was closed after being marked as an approved SDR. It contains a markdown file capturing the SDR body at the time the issue was closed. Please verify that the markdown is correct before merging!" || true | |
exit 0 | |
else | |
echo "Error - Branch $BRANCH already exists, PR will need to be created manually. SDR text is below. Exiting." | |
echo " --- " | |
echo "Filename: ${{ steps.create-sdr.outputs.filename }}" | |
echo " --- Start File --- " | |
echo "${{ steps.create-sdr.outputs.sdr }}" | |
echo " --- End File --- " | |
# Create a step summary | |
echo "# Error" >> $GITHUB_STEP_SUMMARY | |
echo "Branch $BRANCH already exists, PR will need to be created manually. SDR contents are below. Exiting." >> $GITHUB_STEP_SUMMARY | |
echo "## Filename" >> $GITHUB_STEP_SUMMARY | |
echo "\`${{ steps.create-sdr.outputs.filename }}\`" >> $GITHUB_STEP_SUMMARY | |
echo "## SDR Contents" >> $GITHUB_STEP_SUMMARY | |
echo "${{ steps.create-sdr.outputs.sdr }}" >> $GITHUB_STEP_SUMMARY | |
exit 1 | |
fi |