From 2a1c73064acb7641c80157032e935a6ba3daeea8 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 28 Jun 2024 09:58:52 -0700 Subject: [PATCH] Add workflows and adjust for new repo --- .github/workflows/daily.yml | 33 ++++++++ .github/workflows/deploy.yml | 81 +++++++++++++++++++ .github/workflows/test.yml | 39 +++++++++ .knip.jsonc | 2 +- packages/mergebot/package.json | 13 +-- .../src/_tests/fixturedActions.test.ts | 2 +- packages/mergebot/src/execute-pr-actions.ts | 2 +- packages/mergebot/src/graphql-client.ts | 4 +- pnpm-lock.yaml | 2 +- 9 files changed, 166 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/daily.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml new file mode 100644 index 0000000000..a5bd712c0d --- /dev/null +++ b/.github/workflows/daily.yml @@ -0,0 +1,33 @@ +name: Daily Open PR Sync + +on: + workflow_dispatch: ~ + schedule: + - cron: '37 */6 * * *' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: '20.x' + - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 + - run: pnpm install + - run: pnpm run build + + # Go through all open PRs and run the bot over them + - run: node packages/mergebot/dist/run.js + env: + TYPESCRIPT_BOT_TOKEN: ${{ secrets.TYPESCRIPT_BOT_TOKEN }} + + keepalive-job: + name: Keepalive Workflow + runs-on: ubuntu-latest + permissions: + actions: write + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: gautamkrishnar/keepalive-workflow@05456e7809058d586d96392e99217726ccc10076 # v2.0.5 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000000..b06de2e492 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,81 @@ +name: Deploy to Azure + +on: + push: + branches: + - master + workflow_dispatch: + +env: + NODE_VERSION: '18.x' # set this to the node version to use (supports 8.x, 10.x, 12.x) + RESOURCE_GROUP_NAME: dtmergebot3 + FUNCTION_APP_NAME: dtmergebot3 + STORAGE_ACCOUNT_NAME: dtmergebot3b1b7 + STORAGE_CONTAINER_NAME: deployment + FUNCTION_ZIP_NAME: function.zip + +defaults: + run: + shell: bash + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: ${{ env.NODE_VERSION }} + + - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 + + - name: Install and test + run: | + pnpm install + pnpm run --if-present build + pnpm run --if-present test + - name: Bundle + working-directory: packages/mergebot + run: pnpm run bundle + + - name: Check bundle + run: TYPESCRIPT_BOT_TOKEN=secret node packages/mergebot/dist/functions/index.js + + - name: Create zip + run: zip -r ${{ env.FUNCTION_ZIP_NAME }} packagaes/mergebot/dist packages/mergebot/host.json packages/mergebot/package.json + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + with: + name: node-app + path: ${{ env.FUNCTION_ZIP_NAME }} + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + permissions: + id-token: write + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + with: + name: node-app + + - uses: azure/login@6c251865b4e6290e7b78be643ea2d005bc51f69a # v2.1.1 + with: + client-id: ${{ secrets.AZURE_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TENANT_ID }} + subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Upload blob + run: az storage blob upload -f ${{ env.FUNCTION_ZIP_NAME }} --account-name ${{ env.STORAGE_ACCOUNT_NAME }} -c ${{ env.STORAGE_CONTAINER_NAME }} -n ${{ env.FUNCTION_ZIP_NAME }} --overwrite true --auth-mode login + + # - name: Set package path + # run: az functionapp config appsettings set -g ${{ env.RESOURCE_GROUP_NAME }} -n ${{ env.FUNCTION_APP_NAME }} --settings WEBSITE_RUN_FROM_PACKAGE="https://${{ env.STORAGE_ACCOUNT_NAME }}.blob.core.windows.net/${{ env.STORAGE_CONTAINER_NAME }}/${{ env.FUNCTION_ZIP_NAME }}" + + - name: Restart app + run: az functionapp restart -g ${{ env.RESOURCE_GROUP_NAME }} -n ${{ env.FUNCTION_APP_NAME }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000000..721a62ea55 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,39 @@ +name: CI +on: pull_request + +defaults: + run: + shell: bash + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: '20.x' + - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 + - run: pnpm install + - run: pnpm run lint + - run: npx knip + test: + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: '20.x' + - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 + - run: pnpm install + - run: pnpm run build + - run: pnpm test + - working-directory: packages/mergebot + run: pnpm run bundle + - run: TYPESCRIPT_BOT_TOKEN=secret node packages/mergebot/dist/functions/index.js diff --git a/.knip.jsonc b/.knip.jsonc index 1606830e16..3c0ed16e97 100644 --- a/.knip.jsonc +++ b/.knip.jsonc @@ -78,7 +78,7 @@ "ignoreDependencies": ["@qiwi/npm-types"] }, "packages/mergebot": { - "entry": ["src/index.ts"], + "entry": ["src/functions/index.ts"], "project": "**/*.ts" } }, diff --git a/packages/mergebot/package.json b/packages/mergebot/package.json index df71c9dc43..9ba3157f00 100644 --- a/packages/mergebot/package.json +++ b/packages/mergebot/package.json @@ -1,16 +1,17 @@ { - "name": "dt-mergebot", - "version": "3.0.0", + "name": "@definitelytyped/mergebot", + "private": true, + "version": "0.1.12", "description": "The bot that manages DefinitelyTyped PRs.", "author": "DT Maintainers", - "homepage": "https://github.com/DefinitelyTyped/dt-mergebot#readme", + "homepage": "https://github.com/microsoft/definitelytyped-tools#readme", "main": "dist/functions/index.js", "repository": { "type": "git", - "url": "https://github.com/DefinitelyTyped/dt-mergebot.git" + "url": "https://github.com/microsoft/definitelytyped-tools.git" }, "bugs": { - "url": "https://github.com/DefinitelyTyped/dt-mergebot/issues" + "url": "https://github.com/microsoft/definitelytyped-tools/issues" }, "license": "MIT", "engines": { @@ -20,7 +21,7 @@ "@apollo/client": "^3.10.3", "@azure/functions": "^4.4.0", "@definitelytyped/old-header-parser": "npm:@definitelytyped/header-parser@0.0.178", - "@definitelytyped/utils": "workspace:", + "@definitelytyped/utils": "workspace:*", "@octokit/webhooks-methods": "^4.1.0", "dayjs": "^1.11.11", "fast-json-patch": "^3.1.1", diff --git a/packages/mergebot/src/_tests/fixturedActions.test.ts b/packages/mergebot/src/_tests/fixturedActions.test.ts index cd509f2b1b..73484dae12 100644 --- a/packages/mergebot/src/_tests/fixturedActions.test.ts +++ b/packages/mergebot/src/_tests/fixturedActions.test.ts @@ -17,7 +17,7 @@ expect.extend({ toMatchFile }); /* You can use the following command to add/update fixtures with an existing PR * - * BOT_AUTH_TOKEN=XYZ pnpm run create-fixture -- 43164 + * TYPESCRIPT_BOT_TOKEN=XYZ pnpm run create-fixture -- 43164 */ async function testFixture(dir: string) { diff --git a/packages/mergebot/src/execute-pr-actions.ts b/packages/mergebot/src/execute-pr-actions.ts index fe45b713b3..19e3700861 100644 --- a/packages/mergebot/src/execute-pr-actions.ts +++ b/packages/mergebot/src/execute-pr-actions.ts @@ -158,7 +158,7 @@ function doRestCall(call: RestMutation): Promise { const url = `https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/${call.op}`; const headers = { "accept": "application/vnd.github.v3+json", - "authorization": `token ${process.env.BOT_AUTH_TOKEN}`, + "authorization": `token ${process.env.TYPESCRIPT_BOT_TOKEN}`, "user-agent": "dt-mergebot" }; return new Promise((resolve, reject) => { diff --git a/packages/mergebot/src/graphql-client.ts b/packages/mergebot/src/graphql-client.ts index f518370e1c..90fb95d8bf 100644 --- a/packages/mergebot/src/graphql-client.ts +++ b/packages/mergebot/src/graphql-client.ts @@ -33,9 +33,9 @@ export function createMutation(name: keyof schema.Mutation, input: T, subquer function getAuthToken() { if (process.env.JEST_WORKER_ID) return "FAKE_TOKEN"; - const result = process.env["BOT_AUTH_TOKEN"] || process.env["AUTH_TOKEN"] || process.env["DT_BOT_AUTH_TOKEN"]; + const result = process.env["BOT_AUTH_TOKEN"] || process.env["AUTH_TOKEN"] || process.env["DT_BOT_AUTH_TOKEN"] || process.env["TYPESCRIPT_BOT_TOKEN"]; if (typeof result !== "string") { - throw new Error("Set either BOT_AUTH_TOKEN or AUTH_TOKEN to a valid auth token"); + throw new Error("Set either BOT_AUTH_TOKEN or TYPESCRIPT_BOT_TOKEN to a valid auth token"); } return result.trim(); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c314f3e4f..df2b59a653 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -304,7 +304,7 @@ importers: specifier: npm:@definitelytyped/header-parser@0.0.178 version: '@definitelytyped/header-parser@0.0.178' '@definitelytyped/utils': - specifier: 'workspace:' + specifier: workspace:* version: link:../utils '@octokit/webhooks-methods': specifier: ^4.1.0