From d6729ec46ca055bca0204ba777404c971673ca26 Mon Sep 17 00:00:00 2001 From: Kyrylo Shmidt Date: Thu, 12 Dec 2024 17:52:30 +0100 Subject: [PATCH] Add Update Jaeger dependencies script --- .github/workflows/update-jaeger.yml | 32 +++++++++++++++++ package.json | 3 +- .../download-jaeger-ui.mts | 2 +- scripts/update-jaeger.mts | 35 +++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/update-jaeger.yml rename download-jaeger-ui.mts => scripts/download-jaeger-ui.mts (96%) create mode 100644 scripts/update-jaeger.mts diff --git a/.github/workflows/update-jaeger.yml b/.github/workflows/update-jaeger.yml new file mode 100644 index 000000000..8872cd9ea --- /dev/null +++ b/.github/workflows/update-jaeger.yml @@ -0,0 +1,32 @@ +name: Update Jaeger dependencies + +on: + repository_dispatch: + types: [update-jaeger] + +jobs: + update-jaeger: + runs-on: ubuntu-latest + env: + BRANCH_NAME: update-jaeger + DEPENDENCIES_FILENAME: dependencies.json + JAEGER_DIFF_FILENAME: dependencies.diff + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.CONTENTS_WRITE_PAT }} + + - name: Update dependencies.json + run: | + echo ${{ toJson(github.event.client_payload) }} > dependencies.diff.json + npm run update-jaeger + + - name: Commit, push changes and create PR + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b ${{ env.BRANCH_NAME }} + git add dependencies.json + git commit -m "Update Jaeger dependencies" + git push origin ${{ env.BRANCH_NAME }} + gh pr create -t "Update Jaeger dependencies" -B main -H ${{ env.BRANCH_NAME }} diff --git a/package.json b/package.json index 019892bac..00a2b345d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "storybook": "storybook dev -p 6006", "start": "npm run storybook", "build-storybook": "storybook build", - "download-jaeger-ui": "node --experimental-transform-types ./download-jaeger-ui.mts --output jaeger-ui", + "download-jaeger-ui": "node --experimental-transform-types ./scripts/download-jaeger-ui.mts --output jaeger-ui", + "update-jaeger": "node --experimental-transform-types ./scripts/update-jaeger.mts", "prebuild": "rimraf dist && npm run download-jaeger-ui", "build:dev": "npm run prebuild && webpack --progress --config webpack.dev.ts", "build:dev:jetbrains": "npm run build:dev --env platform=JetBrains", diff --git a/download-jaeger-ui.mts b/scripts/download-jaeger-ui.mts similarity index 96% rename from download-jaeger-ui.mts rename to scripts/download-jaeger-ui.mts index 4155520e0..ed53273be 100644 --- a/download-jaeger-ui.mts +++ b/scripts/download-jaeger-ui.mts @@ -3,7 +3,7 @@ import { Octokit } from "@octokit/rest"; import AdmZip from "adm-zip"; import fs from "fs"; import path from "path"; -import dependenciesJson from "./dependencies.json" assert { type: "json" }; +import dependenciesJson from "../dependencies.json" assert { type: "json" }; interface DependenciesJson { jetBrainsPluginVersion: string; diff --git a/scripts/update-jaeger.mts b/scripts/update-jaeger.mts new file mode 100644 index 000000000..90c04f3ed --- /dev/null +++ b/scripts/update-jaeger.mts @@ -0,0 +1,35 @@ +import * as fs from "fs/promises"; +import * as path from "path"; + +type Dependencies = Record; + +const isDependencies = (object: unknown): object is Dependencies => + typeof object === "object" && + object !== null && + !Array.isArray(object) && + Object.values(object).every((value) => typeof value === "string"); + +const readDependencyFile = async (path: string): Promise => { + const file = await fs.readFile(path, "utf-8"); + const dependenciesObject = JSON.parse(file) as unknown; + + if (!isDependencies(dependenciesObject)) { + throw new Error(`Invalid format in ${path}`); + } + + return dependenciesObject; +}; + +const dependenciesFilePath = path.resolve("./dependencies.json"); +const dependencies = await readDependencyFile(dependenciesFilePath); + +const dependenciesDiffFilePath = path.resolve("./dependencies.diff.json"); +const dependenciesDiff = await readDependencyFile(dependenciesDiffFilePath); + +const mergedDependencies = { ...dependencies, ...dependenciesDiff }; + +await fs.writeFile( + dependenciesFilePath, + JSON.stringify(mergedDependencies, null, 2), + "utf-8" +);