diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index ca306a5..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2023-02-01T02:25:29.847Z diff --git a/.github/workflows/productionize.yml b/.github/workflows/productionize.yml index f4eea88..3e8e2db 100644 --- a/.github/workflows/productionize.yml +++ b/.github/workflows/productionize.yml @@ -34,6 +34,12 @@ 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 @@ -94,10 +100,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: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ad8ed19..f56d473 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -21,9 +21,23 @@ name: publish # Workflow triggers: on: - # Run workflow when a new tag is pushed to the repository: - push: - tags: v[0-9]+.[0-9]+.[0-9]+ + # Allow the workflow to be manually run: + workflow_dispatch: + # Workflow inputs: + inputs: + version: + description: 'Version Increment' + type: choice + default: 'none' + options: + - 'none' + - 'major' + - 'minor' + - 'patch' + - 'premajor' + - 'preminor' + - 'prepatch' + - 'prerelease' # Workflow jobs: jobs: @@ -32,7 +46,7 @@ jobs: publish: # Define display name: - name: 'Publish to npm' + name: 'Publish package to npm' # Define the type of virtual host machine on which to run the job: runs-on: ubuntu-latest @@ -40,6 +54,7 @@ jobs: # Define environment variables: env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # Define the sequence of job steps... steps: @@ -55,6 +70,91 @@ jobs: node-version: 16 timeout-minutes: 5 + # Configure git: + - name: 'Configure git' + run: | + git config --local user.email "noreply@stdlib.io" + git config --local user.name "stdlib-bot" + + # Increment package version (if requested): + - name: 'Increment package version (if requested)' + if: ${{ github.event.inputs.version != 'none' }} + run: | + # Save NPM_TOKEN to user's .npmrc: + echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc + + # Increment package version: + npm version ${{ github.event.inputs.version }} --no-git-tag-version + + # Define variable for new version: + NEW_VERSION=$(node -p "require('./package.json').version") + + # Replace branch in README.md link definitions for badges with the new version: + find . -type f -name '*.md' -print0 | xargs -0 sed -Ei "s/branch([=:])[^ ]+/branch\1v${NEW_VERSION}/g" + + # Create a new commit and tag: + git add package.json README.md + git commit -m "Release v${NEW_VERSION}" + git tag -a "v${NEW_VERSION}" -m "Release v${NEW_VERSION}" + + # Push changes to GitHub: + SLUG=${{ github.repository }} + git push "https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$SLUG.git" --follow-tags + + # Remove CLI: + - name: 'Remove CLI' + if: ${{ github.ref == 'refs/heads/main' }} + run: | + # Exit if the package does not have a CLI: + if ! grep -q '"bin":' package.json; then + exit 0 + fi + rm -rf ./bin/cli + rm -f test/test.cli.js + rm -f etc/cli_opts.json + rm -f docs/usage.txt + + # For all dependencies, check in all *.js files if they are still used; if not, remove them: + jq -r '.dependencies | keys[]' ./package.json | while read -r dep; do + dep=$(echo "$dep" | xargs) + if ! grep -q "$dep" lib/** && ! grep -q -s "$dep" manifest.json && ! grep -q -s "$dep" include.gypi; then + jq --indent 2 "del(.dependencies[\"$dep\"])" ./package.json > ./package.json.tmp + mv ./package.json.tmp ./package.json + fi + done + jq -r '.devDependencies | keys[]' ./package.json | while read -r dep; do + if [[ "$dep" != "@stdlib"* ]]; then + continue + fi + dep=$(echo "$dep" | xargs) + if ! grep -q "$dep" lib/** && ! grep -q -s "$dep" manifest.json && ! grep -q -s "$dep" include.gypi; then + jq --indent 2 "del(.devDependencies[\"$dep\"])" ./package.json > ./package.json.tmp + mv ./package.json.tmp ./package.json + fi + done + + # Remove CLI section: + find . -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/(\* \* \*\n+)?
[\s\S]+?<\!\-\- \/.cli \-\->//" + + # Remove CLI from package.json: + jq -r 'del(.bin)' package.json > package.json.tmp + mv package.json.tmp package.json + + # Add entry for CLI package to See Also section of README.md: + cliPkgName=$(jq -r '.name' package.json)-cli + escapedPkg=$(echo "$cliPkgName" | sed -e 's/\//\\\//g') + escapedPkg=$(echo "$escapedPkg" | sed -e 's/\@/\\\@/g') + find . -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
(?:\n\n\* \* \*\n\n## See Also\n\n)?/
\n\n## See Also\n\n- [\`$escapedPkg\`][$escapedPkg]<\/span>: <\/span>CLI package for use as a command-line utility.<\/span>\n/" + + # Add link definition for CLI package to README.md: + find . -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/
/
\n\n[$escapedPkg]: https:\/\/www.npmjs.com\/package\/$escapedPkg/" + + # Replace GitHub MathJax equations with SVGs: + - name: 'Replace GitHub MathJax equations with SVGs' + run: | + find . -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe 's/```math\n([\s\S]+?)\n```\n\n//g' + find . -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe 's/)/
/sg' + # Replace GitHub links to individual packages with npm links: - name: 'Replace all GitHub links to individual packages with npm links' run: | @@ -65,10 +165,35 @@ jobs: run: | find . -type f -name '*.md' -print0 | xargs -0 perl -0777 -i -pe "s/\`\`\`\n\nAlternatively,[^<]+<\/section>/\`\`\`\n\n<\/section>/" + # Remove unnecessary files: + - name: 'Remove unnecessary files' + run: | + rm -f docs/repl.txt + rm -f docs/types/test.ts + # Replace all stdlib GitHub dependencies with the respective npm packages: - name: 'Replace all stdlib GitHub dependencies with the respective npm packages' run: | - find package.json -type f -print0 | xargs -0 sed -Ei 's/"github:stdlib-js[^"]*"/"^0.0.x"/g' + for dep in $(jq -r '.dependencies | keys | .[]' package.json); do + if [[ "$dep" != "@stdlib"* ]]; then + continue + fi + # Trim leading and trailing whitespace: + dep=$(echo "$dep" | xargs) + version="^$(npm view $dep version)" + jq -r --arg dep "$dep" --arg version "$version" '.dependencies[$dep] = $version' package.json > package.json.tmp + mv package.json.tmp package.json + done + for dep in $(jq -r '.devDependencies | keys | .[]' package.json); do + if [[ "$dep" != "@stdlib"* ]]; then + continue + fi + # Trim leading and trailing whitespace: + dep=$(echo "$dep" | xargs) + version="^$(npm view $dep version)" + jq -r --arg dep "$dep" --arg version "$version" '.devDependencies[$dep] = $version' package.json > package.json.tmp + mv package.json.tmp package.json + done # Publish package to npm: - name: 'Publish package to npm' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d73f2ad..18b763d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,6 +32,11 @@ on: # Run workflow on each push to the main branch: push: + # Run workflow upon completion of `publish` workflow run: + workflow_run: + workflows: ["publish"] + types: [completed] + # Workflow jobs: jobs: diff --git a/.gitignore b/.gitignore index 9641214..49b206b 100644 --- a/.gitignore +++ b/.gitignore @@ -182,3 +182,7 @@ jsconfig.json ################ *.sublime-workspace *.sublime-project + +# Other editor files # +###################### +.idea/ diff --git a/CONTRIBUTORS b/CONTRIBUTORS index f97b6ef..34dfa68 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -9,9 +9,11 @@ Bruno Fenzl Christopher Dambamuromo Dominik Moritz Frank Kovacs +Harshita Kalani <95532771+HarshitaKalani@users.noreply.github.com> James Jithin KS Joey Reed +Jordan-Gallivan <115050475+Jordan-Gallivan@users.noreply.github.com> Joris Labie Justin Dennison Marcus @@ -27,4 +29,5 @@ Seyyed Parsa Neshaei Shraddheya Shendre Stephannie Jiménez Gacha dorrin-sot <59933477+dorrin-sot@users.noreply.github.com> +orimiles5 <97595296+orimiles5@users.noreply.github.com> rei2hu diff --git a/README.md b/README.md index 3eccd86..7930ee1 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,14 @@ The [probability mass function][pmf] (PMF) for a [binomial][binomial-distributio -
+```math +f(x;n,p)=P(X=x;n,p)=\begin{cases} \textstyle {n \choose x}\, p^x (1-p)^{n-x} & \text{ for } x = 0,1,2,\ldots \\ 0 & \text{ otherwise} \end{cases} +``` + + @@ -229,7 +233,7 @@ Copyright © 2016-2023. The Stdlib [Authors][stdlib-authors]. --> [chat-image]: https://img.shields.io/gitter/room/stdlib-js/stdlib.svg -[chat-url]: https://gitter.im/stdlib-js/stdlib/ +[chat-url]: https://app.gitter.im/#/room/#stdlib-js_stdlib:gitter.im [stdlib]: https://github.com/stdlib-js/stdlib diff --git a/branches.md b/branches.md index 9a74a4b..79fedf8 100644 --- a/branches.md +++ b/branches.md @@ -38,12 +38,12 @@ C -->|bundle| D[esm]; C -->|bundle| E[deno]; C -->|bundle| F[umd]; -click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/base/dists/binomial/pmf" -click B href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/main" -click C href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/production" -click D href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/esm" -click E href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/deno" -click F href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/umd" +%% click A href "https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/base/dists/binomial/pmf" +%% click B href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/main" +%% click C href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/production" +%% click D href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/esm" +%% click E href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/deno" +%% click F href "https://github.com/stdlib-js/stats-base-dists-binomial-pmf/tree/umd" ``` [stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/base/dists/binomial/pmf diff --git a/package.json b/package.json index a35aad9..cbe5f7c 100644 --- a/package.json +++ b/package.json @@ -37,25 +37,25 @@ "url": "https://github.com/stdlib-js/stdlib/issues" }, "dependencies": { - "@stdlib/constants-float64-pinf": "^0.0.x", - "@stdlib/math-base-assert-is-nan": "^0.0.x", - "@stdlib/math-base-assert-is-nonnegative-integer": "^0.0.x", - "@stdlib/math-base-special-binomcoefln": "^0.0.x", - "@stdlib/math-base-special-exp": "^0.0.x", - "@stdlib/math-base-special-ln": "^0.0.x", - "@stdlib/math-base-special-log1p": "^0.0.x", - "@stdlib/stats-base-dists-degenerate-pmf": "^0.0.x", - "@stdlib/utils-constant-function": "^0.0.x", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.x" + "@stdlib/constants-float64-pinf": "^0.0.8", + "@stdlib/math-base-assert-is-nan": "^0.0.8", + "@stdlib/math-base-assert-is-nonnegative-integer": "^0.0.7", + "@stdlib/math-base-special-binomcoefln": "^0.0.7", + "@stdlib/math-base-special-exp": "^0.0.6", + "@stdlib/math-base-special-ln": "^0.0.6", + "@stdlib/math-base-special-log1p": "^0.0.6", + "@stdlib/stats-base-dists-degenerate-pmf": "^0.0.8", + "@stdlib/utils-constant-function": "^0.0.8", + "@stdlib/utils-define-nonenumerable-read-only-property": "^0.0.7" }, "devDependencies": { - "@stdlib/bench": "^0.0.x", - "@stdlib/constants-float64-eps": "^0.0.x", - "@stdlib/constants-float64-ninf": "^0.0.x", - "@stdlib/math-base-special-abs": "^0.0.x", - "@stdlib/math-base-special-ceil": "^0.0.x", - "@stdlib/math-base-special-round": "^0.0.x", - "@stdlib/random-base-randu": "^0.0.x", + "@stdlib/bench": "^0.0.12", + "@stdlib/constants-float64-eps": "^0.0.8", + "@stdlib/constants-float64-ninf": "^0.0.8", + "@stdlib/math-base-special-abs": "^0.0.6", + "@stdlib/math-base-special-ceil": "^0.0.8", + "@stdlib/math-base-special-round": "^0.0.7", + "@stdlib/random-base-randu": "^0.0.8", "tape": "git+https://github.com/kgryte/tape.git#fix/globby", "istanbul": "^0.4.1", "tap-min": "git+https://github.com/Planeshifter/tap-min.git" @@ -97,7 +97,7 @@ "univariate" ], "funding": { - "type": "patreon", - "url": "https://www.patreon.com/athan" + "type": "opencollective", + "url": "https://opencollective.com/stdlib" } }