Skip to content

Commit

Permalink
Auto-generated commit
Browse files Browse the repository at this point in the history
  • Loading branch information
stdlib-bot committed Mar 1, 2023
1 parent bb28fe3 commit 1edcc4b
Show file tree
Hide file tree
Showing 10 changed files with 550 additions and 36 deletions.
2 changes: 1 addition & 1 deletion .github/.keepalive
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2023-02-01T01:42:33.084Z
2023-03-01T04:17:45.092Z
226 changes: 221 additions & 5 deletions .github/workflows/productionize.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ on:
type: boolean
default: true

# Run workflow upon completion of `publish` workflow run:
workflow_run:
workflows: ["publish"]
types: [completed]

# Concurrency group to prevent multiple concurrent executions:
concurrency:
group: productionize
Expand Down Expand Up @@ -94,10 +99,11 @@ jobs:
# Change `@stdlib/string-format` to `@stdlib/error-tools-fmtprodmsg` in package.json if the former is a dependency, otherwise insert it as a dependency:
- name: 'Update dependencies in package.json'
run: |
PKG_VERSION=$(npm view @stdlib/error-tools-fmtprodmsg version)
if grep -q '"@stdlib/string-format"' package.json; then
sed -i "s/\"@stdlib\/string-format\"/\"@stdlib\/error-tools-fmtprodmsg\"/g" package.json
sed -i "s/\"@stdlib\/string-format\": \"^.*\"/\"@stdlib\/error-tools-fmtprodmsg\": \"^$PKG_VERSION\"/g" package.json
else
node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^0.0.x'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );"
node -e "var pkg = require( './package.json' ); pkg.dependencies[ '@stdlib/error-tools-fmtprodmsg' ] = '^$PKG_VERSION'; require( 'fs' ).writeFileSync( 'package.json', JSON.stringify( pkg, null, 2 ) );"
fi
# Configure git:
Expand Down Expand Up @@ -462,7 +468,6 @@ jobs:
# Rewrite file contents:
- name: 'Rewrite file contents'
run: |
# Replace links to other packages with links to the umd branch:
find ./umd -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/umd/";
Expand Down Expand Up @@ -625,7 +630,6 @@ jobs:
# Rewrite file contents:
- name: 'Rewrite file contents'
run: |
# Replace links to other packages with links to the esm branch:
find ./esm -type f -name '*.md' -print0 | xargs -0 sed -Ei "/\/tree\/main/b; /^\[@stdlib[^:]+: https:\/\/github.com\/stdlib-js\// s/(.*)/\\1\/tree\/esm/";
Expand Down Expand Up @@ -697,6 +701,198 @@ jobs:
channel: '#npm-ci'
if: failure()

# Define job to create CLI branch:
cli:

# Define display name:
name: 'Create CLI branch'

# Define the type of virtual host machine on which to run the job:
runs-on: ubuntu-latest

# Indicate that this job depends on the test job finishing:
needs: test

# Define the sequence of job steps...
steps:
# Checkout the repository:
- name: 'Checkout repository'
uses: actions/checkout@v3

# Configure git:
- name: 'Configure git'
run: |
git config --local user.email "noreply@stdlib.io"
git config --local user.name "stdlib-bot"
# Check if remote `cli` branch exists:
- name: 'Check if remote `cli` branch exists'
id: cli-branch-exists
continue-on-error: true
run: |
git fetch --all
git ls-remote --exit-code --heads origin cli
if [ $? -eq 0 ]; then
echo "remote-exists=true" >> $GITHUB_OUTPUT
else
echo "remote-exists=false" >> $GITHUB_OUTPUT
fi
# If `cli` exists, delete everything in branch and merge `production` into it
- name: 'If `cli` exists, delete everything in branch and merge `production` into it'
if: steps.cli-branch-exists.outputs.remote-exists
run: |
git checkout -b cli origin/cli
find . -type 'f' | grep -v -e ".git/" -e "package.json" -e "README.md" -e "LICENSE" -e "CONTRIBUTORS" -e "NOTICE" | xargs -r rm
find . -mindepth 1 -type 'd' | grep -v -e ".git" | xargs -r rm -rf
git add -A
git commit -m "Remove files" --allow-empty
git config merge.theirs.name 'simulate `-s theirs`'
git config merge.theirs.driver 'cat %B > %A'
GIT_CONFIG_PARAMETERS="'merge.default=theirs'" git merge origin/production --allow-unrelated-histories
# Copy files from `production` branch if necessary:
git checkout origin/production -- .
if [ -n "$(git status --porcelain)" ]; then
git add -A
git commit -m "Auto-generated commit"
fi
# If `cli` does not exist, create `cli` branch:
- name: 'If `cli` does not exist, create `cli` branch'
if: ${{ steps.cli-branch-exists.outputs.remote-exists == false }}
run: |
git checkout production
git checkout -b cli
# Copy files to cli directory:
- name: 'Copy files to cli directory'
run: |
mkdir -p cli
mkdir -p cli/docs cli/test
cp README.md LICENSE CONTRIBUTORS NOTICE ./cli
cp -r bin etc ./cli
cp test/test.cli.js ./cli/test
if [ -d "test/fixtures" ]; then
cp -r test/fixtures ./cli/test
fi
cp docs/usage.txt ./cli/docs
# Install Node.js:
- name: 'Install Node.js'
uses: actions/setup-node@v3
with:
node-version: 16
timeout-minutes: 5

# Install dependencies:
- name: 'Install production and development dependencies'
id: install
run: |
npm install || npm install || npm install
timeout-minutes: 15

# Rewrite file contents:
- name: 'Rewrite file contents'
run: |
# Define variable for package name:
pkg="$(jq -r '.name' ./package.json)"
escapedPkg=$(echo "$pkg" | sed -e 's/\//\\\//g')
escapedPkg=$(echo "$escapedPkg" | sed -e 's/\@/\\\@/g')
# Define variable for package description:
pkgDescription="$(jq -r '.description' ./package.json)"
pkgDescription="$(echo "$pkgDescription" | sed -e 's/^\([A-Z]\)/\L\1/')"
# Remove sections:
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/<section class=\"installation\">[^<]+<\/section>//;"
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?<section class=\"usage\">[\s\S]+?<\!\-\- \/.usage \-\->//"
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?<section class=\"notes\">[\s\S]+?<\!\-\- \/.notes \-\->//"
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?<section class=\"examples\">[\s\S]+?<\!\-\- \/.examples \-\->//"
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?<section class=\"c\">[\s\S]+?<\!\-\- \/.c \-\->//g"
# Remove first horizontal rule * * *:
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*)//"
# Remove ## CLI heading:
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/## CLI//"
# Change heading levels:
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/###/##/g"
# Append -cli to package name unless it already ends with -cli:
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(?<!\[)($escapedPkg)(?!-cli)/\1-cli/g"
# Insert a link to the main package:
find ./cli -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/<section class=\"related\">(?:\n\n\* \* \*\n\n## See Also\n\n)?/<section class=\"related\">\n\n## See Also\n\n- <span class=\"package-name\">[\`$escapedPkg\`][$escapedPkg]<\/span><span class=\"delimiter\">: <\/span><span class=\"description\">$pkgDescription<\/span>\n/"
# Create package.json file for cli branch:
jq --indent 2 '.name = .name + "-cli" | {"name": .name, "version": .version, "description": .description, "license": .license, "author": .author, "contributors": .contributors, "bin": .bin, "homepage": .homepage, "repository": .repository, "bugs": .bugs, "dependencies": .dependencies, "devDependencies": .devDependencies, "keywords": .keywords, "funding": .funding}' package.json > ./cli/package.json
# Add implementation package as dependency:
version=$(npm view "$pkg" version)
jq --indent 2 ".dependencies[\"$pkg\"] = \"$version\"" ./cli/package.json > ./cli/package.json.tmp
mv ./cli/package.json.tmp ./cli/package.json
# Rewrite require of main module in bin/cli to depend on external package:
perl -0777 -i -pe "s/require\( \'\.\/\.\.\/lib\' \)/require\( \'$escapedPkg\' \)/" ./cli/bin/cli
# For all dependencies, check if they are required by the CLI; if not, remove them:
jq -r '.dependencies | keys[]' ./cli/package.json | while read -r dep; do
dep=$(echo "$dep" | xargs)
if ! grep -q "$dep" ./cli/test/** && ! grep -q "$dep" ./cli/bin/**; then
jq --indent 2 "del(.dependencies[\"$dep\"])" ./cli/package.json > ./cli/package.json.tmp
mv ./cli/package.json.tmp ./cli/package.json
fi
done
jq -r '.devDependencies | keys[]' ./cli/package.json | while read -r dep; do
if [[ "$dep" != "@stdlib"* ]]; then
continue
fi
dep=$(echo "$dep" | xargs)
if ! grep -q "$dep" ./cli/test/** && ! grep -q "$dep" ./cli/bin/**; then
jq --indent 2 "del(.devDependencies[\"$dep\"])" ./cli/package.json > ./cli/package.json.tmp
mv ./cli/package.json.tmp ./cli/package.json
fi
done
# Delete everything in current directory aside from cli folder:
- name: 'Delete everything in current directory aside from cli folder'
run: |
find . -type 'f' | grep -v -e "cli" -e ".git/" | xargs -r rm
find . -mindepth 1 -type 'd' | grep -v -e "cli" -e ".git" | xargs -r rm -rf
# Move cli directory to root:
- name: 'Move cli directory to root'
run: |
mv ./cli/* .
rmdir ./cli
# Commit changes:
- name: 'Commit changes'
run: |
git add -A
git commit -m "Auto-generated commit"
# Push changes to `cli` branch:
- name: 'Push changes to `cli` branch'
run: |
SLUG=${{ github.repository }}
echo "Pushing changes to $SLUG..."
git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" cli
# Send status to Slack channel if job fails:
- name: 'Send status to Slack channel in case of failure'
uses: act10ns/slack@v1
with:
status: ${{ job.status }}
steps: ${{ toJson(steps) }}
channel: '#npm-ci'
if: failure()

# Define job that succeeds if all bundles were successfully built:
create-tag-bundles:

Expand All @@ -707,7 +903,7 @@ jobs:
runs-on: ubuntu-latest

# Indicate that this job depends on the bundle jobs finishing:
needs: [ deno, umd, esm ]
needs: [ deno, umd, esm, cli ]

# Define the steps to be executed:
steps:
Expand Down Expand Up @@ -789,3 +985,23 @@ jobs:
git add README.md
git commit -m "Auto-generated commit"
git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" esm
git checkout -b cli origin/cli
sed -i -E "s/$ESCAPED/$ESCAPED@$VERSION/g" README.md
git add README.md
git commit -m "Update README.md for CLI branch $VERSION"
git tag -a $VERSION-cli -m "$VERSION-cli"
git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" $VERSION-cli
sed -i -E "s/$ESCAPED@$VERSION/$ESCAPED/g" README.md
git add README.md
git commit -m "Auto-generated commit"
git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" cli
# Run publish workflow for CLI package:
- name: 'Run publish workflow for CLI package'
if: steps.check-if-bump.outputs.bump
env:
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
run: |
gh workflow run publish_cli.yml

0 comments on commit 1edcc4b

Please sign in to comment.