feat: add retry strategy to storage client #3337
Workflow file for this run
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: Build | |
on: | |
pull_request: | |
branches: [main] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
verify: | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Setup repo | |
uses: actions/checkout@v3 | |
- name: Verify README generation | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: sdk | |
sdk_language: JavaScript | |
dev_docs_slug: nodejs | |
multiple_sdks: true | |
- name: Verify README generation for nodejs | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: sdk | |
sdk_language: Node.js | |
dev_docs_slug: nodejs | |
template_file: ./packages/client-sdk-nodejs/README.template.md | |
output_file: ./packages/client-sdk-nodejs/README.md | |
- name: Verify README generation for nodejs compression extension | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: alpha | |
project_type: other | |
template_file: ./packages/client-sdk-nodejs-compression/README.template.md | |
output_file: ./packages/client-sdk-nodejs-compression/README.md | |
- name: Verify README generation for nodejs compression zstd extension | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: alpha | |
project_type: other | |
template_file: ./packages/client-sdk-nodejs-compression-zstd/README.template.md | |
output_file: ./packages/client-sdk-nodejs-compression-zstd/README.md | |
- name: Verify README generation for web | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: sdk | |
sdk_language: "JavaScript Web" | |
dev_docs_slug: web | |
template_file: ./packages/client-sdk-web/README.template.md | |
output_file: ./packages/client-sdk-web/README.md | |
- name: Verify README generation for examples | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/README.template.md | |
output_file: ./examples/README.md | |
- name: Verify README generation for examples/deno | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/deno/README.template.md | |
output_file: ./examples/deno/README.md | |
- name: Verify README generation for examples/deno/web-sdk | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/deno/web-sdk/README.template.md | |
output_file: ./examples/deno/web-sdk/README.md | |
- name: Verify README generation for examples/deno/http-api | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/deno/http-api/README.template.md | |
output_file: ./examples/deno/http-api/README.md | |
- name: Verify README generation for examples/nodejs | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/README.template.md | |
output_file: ./examples/nodejs/README.md | |
- name: Verify README generation for examples/nodejs/cache | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/cache/README.template.md | |
output_file: ./examples/nodejs/cache/README.md | |
- name: Verify README generation for examples/nodejs/observability | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: beta | |
project_type: other | |
template_file: ./examples/nodejs/observability/README.template.md | |
output_file: ./examples/nodejs/observability/README.md | |
- name: Verify README generation for examples/nodejs/compression | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/compression/README.template.md | |
output_file: ./examples/nodejs/compression/README.md | |
- name: Verify README generation for examples/nodejs/compression-zstd | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/compression-zstd/README.template.md | |
output_file: ./examples/nodejs/compression-zstd/README.md | |
- name: Verify README generation for examples/nodejs/token-vending-machine | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: beta | |
project_type: other | |
template_file: ./examples/nodejs/token-vending-machine/README.template.md | |
output_file: ./examples/nodejs/token-vending-machine/README.md | |
- name: Verify README generation for examples/nodejs/rate-limiter | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: beta | |
project_type: other | |
template_file: ./examples/nodejs/rate-limiter/README.template.md | |
output_file: ./examples/nodejs/rate-limiter/README.md | |
- name: Verify README generation for examples/nodejs/access-control | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/access-control/README.template.md | |
output_file: ./examples/nodejs/access-control/README.md | |
- name: Verify README generation for examples/nodejs/aws | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/README.template.md | |
output_file: ./examples/nodejs/aws/README.md | |
- name: Verify README generation for examples/nodejs/aws/eventbridge | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/eventbridge/README.template.md | |
output_file: ./examples/nodejs/aws/eventbridge/README.md | |
- name: Verify README generation for examples/nodejs/aws/eventbridge/webapp | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/eventbridge/webapp/README.template.md | |
output_file: ./examples/nodejs/aws/eventbridge/webapp/README.md | |
- name: Verify README generation for examples/nodejs/aws/eventbridge/cliApp | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/eventbridge/cliApp/README.template.md | |
output_file: ./examples/nodejs/aws/eventbridge/cliApp/README.md | |
- name: Verify README generation for examples/nodejs/aws/secrets-manager | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/secrets-manager/README.template.md | |
output_file: ./examples/nodejs/aws/secrets-manager/README.md | |
- name: Verify README generation for examples/nodejs/aws/lambda-examples | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/lambda-examples/README.template.md | |
output_file: ./examples/nodejs/aws/lambda-examples/README.md | |
- name: Verify README generation for examples/nodejs/aws/lambda-examples/simple-get | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/aws/lambda-examples/simple-get/README.template.md | |
output_file: ./examples/nodejs/aws/lambda-examples/simple-get/README.md | |
- name: Verify README generation for examples/nodejs/aws/lambda-examples/cloudwatch-metrics | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: beta | |
project_type: other | |
template_file: ./examples/nodejs/aws/lambda-examples/cloudwatch-metrics/README.template.md | |
output_file: ./examples/nodejs/aws/lambda-examples/cloudwatch-metrics/README.md | |
- name: Verify README generation for examples/nodejs/aws/lambda-examples/advanced-compression | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: beta | |
project_type: other | |
template_file: ./examples/nodejs/aws/lambda-examples/advanced-compression/README.template.md | |
output_file: ./examples/nodejs/aws/lambda-examples/advanced-compression/README.md | |
- name: Verify README generation for examples/nodejs/topics | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/topics/README.template.md | |
output_file: ./examples/nodejs/topics/README.md | |
- name: Verify README generation for examples/nodejs/load-gen | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/load-gen/README.template.md | |
output_file: ./examples/nodejs/load-gen/README.md | |
- name: Verify README generation for examples/nodejs/storage-load-gen | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/nodejs/storage-load-gen/README.template.md | |
output_file: ./examples/nodejs/storage-load-gen/README.md | |
- name: Verify README generation for examples/fastly-compute | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/fastly-compute/README.template.md | |
output_file: ./examples/fastly-compute/README.md | |
- name: Verify README generation for examples/web | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/web/README.template.md | |
output_file: ./examples/web/README.md | |
- name: Verify README generation for examples/web/cache | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/web/cache/README.template.md | |
output_file: ./examples/web/cache/README.md | |
- name: Verify README generation for examples/web/nextjs-chat | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/web/nextjs-chat/README.template.md | |
output_file: ./examples/web/nextjs-chat/README.md | |
- name: Verify README generation for examples/web/vite-chat-app | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: official | |
project_stability: stable | |
project_type: other | |
template_file: ./examples/web/vite-chat-app/README.template.md | |
output_file: ./examples/web/vite-chat-app/README.md | |
- name: Verify README generation for examples/cloudflare-workers | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/cloudflare-workers/README.template.md | |
output_file: ./examples/cloudflare-workers/README.md | |
- name: Verify README generation for examples/cloudflare-workers/http-api | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/cloudflare-workers/http-api/README.template.md | |
output_file: ./examples/cloudflare-workers/http-api/README.md | |
- name: Verify README generation for examples/cloudflare-workers/web-sdk | |
uses: momentohq/standards-and-practices/github-actions/oss-readme-template@gh-actions-v2 | |
with: | |
project_status: incubating | |
project_stability: alpha | |
project_type: other | |
template_file: ./examples/cloudflare-workers/web-sdk/README.template.md | |
output_file: ./examples/cloudflare-workers/web-sdk/README.md | |
- name: Commitlint and Other Shared Build Steps | |
uses: momentohq/standards-and-practices/github-actions/shared-build@gh-actions-v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
cache-tests: | |
strategy: | |
matrix: | |
node: [18] | |
name: Test Cache on Node ${{ matrix.node }} | |
runs-on: ubuntu-latest | |
env: | |
MOMENTO_API_KEY: ${{ secrets.ALPHA_TEST_AUTH_TOKEN }} | |
TEST_LEGACY_AUTH_TOKEN: ${{ secrets.ALPHA_LEGACY_TEST_AUTH_TOKEN }} | |
TEST_MGA_ACCOUNT_SESSION_TOKEN: ${{ secrets.MOMENTO_PREPROD_ACCOUNT_SESSION_TOKEN }} | |
steps: | |
- name: Setup repo | |
uses: actions/checkout@v3 | |
- name: Install Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Build and test all packages | |
run: | | |
node -v | |
./scripts/build-and-test-all-packages.sh | |
test-examples: | |
strategy: | |
matrix: | |
node: [16, 18, 20] | |
fail-fast: true | |
name: Test examples on node ${{ matrix.node }} | |
runs-on: ubuntu-24.04 | |
env: | |
# TODO: remove token stored as secret in favor of using a | |
# momento-local instance that can be spun up for testing | |
MOMENTO_API_KEY: ${{ secrets.ALPHA_TEST_AUTH_TOKEN }} | |
steps: | |
- name: Setup repo | |
uses: actions/checkout@v3 | |
- name: Install Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Install Deps and Build | |
id: validation | |
continue-on-error: true | |
run: | | |
pushd examples/nodejs/cache | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/topics | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/storage | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/compression | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/compression-zstd | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/observability | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/load-gen | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/storage-load-gen | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/aws/lambda-examples/simple-get/infrastructure | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/aws/lambda-examples/cloudwatch-metrics/infrastructure | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/aws/lambda-examples/advanced-compression | |
# This example shows how to build and package a lambda function for a different target architecture, | |
# and thus it requires this `--force` flag. | |
npm ci --force | |
npm run build | |
popd | |
pushd examples/nodejs/mongodb-examples/simple-read-aside | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/access-control | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/nodejs/aws/secrets-manager | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/rate-limiter | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
- name: Send CI failure mail | |
if: ${{ steps.validation.outcome == 'failure' }} | |
uses: momentohq/standards-and-practices/github-actions/error-email-action@gh-actions-v2 | |
with: | |
username: ${{secrets.MOMENTO_ROBOT_GMAIL_USERNAME}} | |
password: ${{secrets.MOMENTO_ROBOT_GMAIL_PASSWORD}} | |
- name: Flag Job Failure | |
if: ${{ steps.validation.outcome == 'failure' }} | |
run: exit 1 | |
test-web-examples: | |
strategy: | |
matrix: | |
node: [ 16, 18 ] | |
fail-fast: true | |
name: Test web examples on node ${{ matrix.node }} | |
runs-on: ubuntu-24.04 | |
env: | |
# TODO: remove token stored as secret in favor of using a | |
# momento-local instance that can be spun up for testing | |
MOMENTO_API_KEY: ${{ secrets.ALPHA_TEST_AUTH_TOKEN }} | |
steps: | |
- name: Setup repo | |
uses: actions/checkout@v3 | |
- name: Install Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Install Deps and Build | |
id: validation | |
continue-on-error: true | |
run: | | |
pushd examples/web/cache | |
npm ci | |
npm run build | |
npm run validate-examples | |
popd | |
pushd examples/web/nextjs-chat | |
npm ci | |
npm run build | |
popd | |
pushd examples/web/vite-chat-app | |
npm ci | |
npm run build | |
popd | |
- name: Send CI failure mail | |
if: ${{ steps.validation.outcome == 'failure' }} | |
uses: momentohq/standards-and-practices/github-actions/error-email-action@gh-actions-v2 | |
with: | |
username: ${{secrets.MOMENTO_ROBOT_GMAIL_USERNAME}} | |
password: ${{secrets.MOMENTO_ROBOT_GMAIL_PASSWORD}} | |
- name: Flag Job Failure | |
if: ${{ steps.validation.outcome == 'failure' }} | |
run: exit 1 | |
test-deno-examples: | |
strategy: | |
matrix: | |
node: [ 16, 18 ] | |
fail-fast: true | |
name: Test Deno examples on node ${{ matrix.node }} | |
runs-on: ubuntu-24.04 | |
env: | |
# TODO: remove token stored as secret in favor of using a | |
# momento-local instance that can be spun up for testing | |
MOMENTO_API_KEY: ${{ secrets.ALPHA_TEST_AUTH_TOKEN }} | |
steps: | |
- name: Setup repo | |
uses: actions/checkout@v3 | |
- name: Install Deno | |
uses: denoland/setup-deno@v1 | |
with: | |
deno-version: v1.x # Run with latest stable Deno. | |
- name: Check formatting and Build | |
id: validation | |
continue-on-error: true | |
run: | | |
pushd examples/deno/web-sdk | |
deno lint | |
deno fmt --check | |
deno compile index.ts | |
popd | |
pushd examples/deno/http-api | |
deno lint | |
deno fmt --check | |
deno compile index.ts | |
popd | |
- name: Send CI failure mail | |
if: ${{ steps.validation.outcome == 'failure' }} | |
uses: momentohq/standards-and-practices/github-actions/error-email-action@gh-actions-v2 | |
with: | |
username: ${{secrets.MOMENTO_ROBOT_GMAIL_USERNAME}} | |
password: ${{secrets.MOMENTO_ROBOT_GMAIL_PASSWORD}} | |
- name: Flag Job Failure | |
if: ${{ steps.validation.outcome == 'failure' }} | |
run: exit 1 | |
verify-packages: | |
strategy: | |
matrix: | |
node: [ 18 ] | |
fail-fast: true | |
name: Verify packages are installable on node ${{ matrix.node }} | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Setup repo | |
uses: actions/checkout@v3 | |
- name: Build all packages | |
run: | | |
pushd packages/core | |
npm install | |
npm run build | |
npm pack | |
popd | |
pushd packages/common-integration-tests | |
npm install | |
npm run build | |
npm pack | |
popd | |
pushd packages/client-sdk-nodejs | |
npm install | |
npm run build | |
npm pack | |
popd | |
pushd packages/client-sdk-web | |
npm install | |
npm run build | |
npm pack | |
popd | |
- name: Locally install in nodejs example and verify it builds | |
run: | | |
pushd examples/nodejs/cache | |
# This is a bit of a hack, but ensures that the package-lock does not get corrupted | |
# due to installing these locally packaged files. All we care about is that the examples | |
# use the locally packaged sdks, and that they can build correctly with no errors | |
rm -rf node_modules package-lock.json | |
npm i ../../../packages/core/gomomento-sdk-core-0.0.1.tgz | |
rm -rf node_modules package-lock.json | |
npm i ../../../packages/client-sdk-nodejs/gomomento-sdk-0.0.1.tgz | |
rm -rf node_modules package-lock.json | |
npm i | |
npm run build | |
popd | |
- name: Locally install in web example and verify it builds | |
run: | | |
pushd examples/web/cache | |
rm -rf node_modules package-lock.json | |
npm i ../../../packages/core/gomomento-sdk-core-0.0.1.tgz | |
rm -rf node_modules package-lock.json | |
npm i ../../../packages/client-sdk-web/gomomento-sdk-web-0.0.1.tgz | |
rm -rf node_modules package-lock.json | |
npm i | |
npm run build | |
popd | |
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions#enable-auto-merge-on-a-pull-request | |
# dependabot-auto-merge: | |
# name: Dependabot Auto Merge | |
# permissions: | |
# contents: write | |
# pull-requests: write | |
# runs-on: ubuntu-latest | |
# # make sure we run all tests/examples and they pass before we try and auto approve/merge the dependabot prs | |
# needs: [test-deno-examples, test-web-examples, test-examples, test, verify] | |
# if: ${{ github.actor == 'dependabot[bot]' }} | |
# steps: | |
# - name: Dependabot metadata | |
# id: metadata | |
# uses: dependabot/fetch-metadata@v1 | |
# with: | |
# github-token: "${{ secrets.GITHUB_TOKEN }}" | |
# - name: Approve a PR | |
# run: gh pr review --approve "$PR_URL" | |
# env: | |
# PR_URL: ${{github.event.pull_request.html_url}} | |
# # need to have an approver first before dependabot can merge the pr, here we are using the shared | |
# # momento github actions bot user | |
# GH_TOKEN: ${{secrets.MOMENTO_MACHINE_USER_GITHUB_TOKEN}} | |
# - name: Enable auto-merge for Dependabot PRs | |
# if: ${{steps.metadata.outputs.update-type != 'version-update:semver-major'}} | |
# run: gh pr merge --squash "$PR_URL" | |
# env: | |
# PR_URL: ${{github.event.pull_request.html_url}} | |
# GH_TOKEN: ${{secrets.GITHUB_TOKEN}} | |