From a2741474e43f4fb77e71260a1191c33a9f0e47cf Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Sat, 25 Oct 2025 11:25:34 +0530 Subject: [PATCH] build: add workflow to update unary function database --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .github/workflows/update_unary_database.yml | 148 ++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 .github/workflows/update_unary_database.yml diff --git a/.github/workflows/update_unary_database.yml b/.github/workflows/update_unary_database.yml new file mode 100644 index 000000000000..974af05b38a8 --- /dev/null +++ b/.github/workflows/update_unary_database.yml @@ -0,0 +1,148 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2025 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# Workflow name: +name: update_unary_database + +# Workflow triggers: +on: + push: + paths: + # List paths for which changes should trigger this workflow: + - 'lib/node_modules/@stdlib/math/special/data/unary_function_database.json' + - 'lib/node_modules/@stdlib/math/base/special/*/package.json' + + # Allow the workflow to be manually run: + workflow_dispatch: + +# Global permissions: +permissions: + # Allow read-only access to the repository contents: + contents: read + +# Workflow jobs: +jobs: + + # Define a job for updating the unary database... + update: + + # Define a display name: + name: 'Update Unary Database' + + # Ensure the job does not run on forks: + if: github.repository == 'stdlib-js/stdlib' + + # Define the type of virtual host machine: + runs-on: ubuntu-latest + + # Define the sequence of job steps... + steps: + + # Checkout the repository: + - name: 'Checkout repository' + # Pin action to full length commit SHA + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + # Specify whether to remove untracked files before checking out the repository: + clean: true + + # Limit clone depth to the most recent commit: + fetch-depth: 1 + + # Specify whether to download Git-LFS files: + lfs: false + + # Avoid storing GitHub token in local Git configuration: + persist-credentials: false + timeout-minutes: 10 + + # Install Node.js: + - name: 'Install Node.js' + # Pin action to full length commit SHA + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: '20' # 'lts/*' + timeout-minutes: 5 + + # Install dependencies (accounting for possible network failures, etc, when installing node module dependencies): + - name: 'Install dependencies' + run: | + make install-node-modules || make install-node-modules || make install-node-modules + timeout-minutes: 15 + + # Update the unary database: + - name: 'Update unary database' + run: | + node lib/node_modules/@stdlib/math/special/scripts/generate_unary_database.js + + # Check if there are any changes to the unary database: + - name: 'Check for changes' + id: check_changes + run: | + if [ -z "$(git diff lib/node_modules/@stdlib/math/special/data/unary.json)" ]; then + echo "No changes detected in unary database. Skipping PR creation." + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "Changes detected in unary database." + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + + # Import GPG key to sign commits: + - name: 'Import GPG key to sign commits' + if: steps.check_changes.outputs.has_changes == 'true' + # Pin action to full length commit SHA + uses: crazy-max/ghaction-import-gpg@e89d40939c28e39f97cf32126055eeae86ba74ec # v6.3.0 + with: + gpg_private_key: ${{ secrets.STDLIB_BOT_GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.STDLIB_BOT_GPG_PASSPHRASE }} + git_user_signingkey: true + git_commit_gpgsign: true + + # Create a pull request with the updated unary database: + - name: 'Create pull request' + if: steps.check_changes.outputs.has_changes == 'true' + id: cpr + # Pin action to full length commit SHA + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 + with: + title: 'feat: update unary database' + body: | + This PR + + - updates the unary database based on changes to the unary function database or package.json scaffold fields + + commit-message: 'feat: update unary database' + committer: 'stdlib-bot <82920195+stdlib-bot@users.noreply.github.com>' + signoff: true + token: ${{ secrets.STDLIB_BOT_PAT_REPO_WRITE }} + labels: | + automated-pr + team-reviewers: | + reviewers + branch: update-unary-database + delete-branch: true + + # Create a pull request summary: + - name: 'Create summary' + if: steps.check_changes.outputs.has_changes == 'true' + run: | + echo "# :tada: Pull Request created! :tada:" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Pull request ${{ steps.cpr.outputs.pull-request-number }} was successfully ${{ steps.cpr.outputs.pull-request-operation }}." + echo ":link: [${{ steps.cpr.outputs.pull-request-url }}](${{ steps.cpr.outputs.pull-request-url }})." >> $GITHUB_STEP_SUMMARY + echo "Head SHA: [${{ steps.cpr.outputs.pull-request-head-sha }}](${{ steps.cpr.outputs.pull-request-url }}/commits/${{ steps.cpr.outputs.pull-request-head-sha }})." >> $GITHUB_STEP_SUMMARY