feat: add rate-limiter using momento cache #2288
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: macos-latest | |
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 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: Commitlint and Other Shared Build Steps | |
uses: momentohq/standards-and-practices/github-actions/shared-build@gh-actions-v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
test: | |
strategy: | |
matrix: | |
node: [18] | |
name: Test on Node ${{ matrix.node }} | |
runs-on: macos-latest | |
env: | |
TEST_AUTH_TOKEN: ${{ secrets.ALPHA_TEST_AUTH_TOKEN }} | |
TEST_SESSION_TOKEN: ${{ secrets.MOMENTO_PREPROD_SESSION_TOKEN }} | |
TEST_LEGACY_AUTH_TOKEN: ${{ secrets.ALPHA_LEGACY_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: Build and test all packages | |
run: | | |
node -v | |
./scripts/build-and-test-all-packages.sh | |
- name: Run auth tests for packages | |
run: | | |
node -v | |
./scripts/test-auth-packages.sh | |
- name: Run vector tests for packages | |
run: | | |
node -v | |
./scripts/test-vector-packages.sh | |
test-examples: | |
strategy: | |
matrix: | |
node: [14, 16, 18] | |
fail-fast: true | |
max-parallel: 1 | |
name: Test examples on node ${{ matrix.node }} | |
runs-on: macos-latest | |
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/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/topics | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/lambda-examples/topics-microservice | |
npm ci | |
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 | |
npm ci | |
npm run build | |
popd | |
pushd examples/nodejs/vector-index | |
npm ci | |
npm run build | |
npm run validate-examples | |
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 | |
max-parallel: 1 | |
name: Test web examples on node ${{ matrix.node }} | |
runs-on: macos-latest | |
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 | |
pushd examples/web/vector-index | |
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-deno-examples: | |
strategy: | |
matrix: | |
node: [ 16, 18 ] | |
fail-fast: true | |
max-parallel: 1 | |
name: Test Deno examples on node ${{ matrix.node }} | |
runs-on: macos-latest | |
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 | |
# 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}} | |