diff --git a/.eslintrc.cjs b/.eslintrc.cjs index dfe57ae41..f83f48fd0 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -12,6 +12,8 @@ module.exports = { * is causing eslint to choke. Investigate workspaces as a solution */ 'examples', + // TODO(RSDK-5406): setup custom linting rules for standalone JS scripts. + 'scripts', ], parserOptions: { project: ['./tsconfig.json', './tsconfig.node.json'], diff --git a/Makefile b/Makefile index 3eab88a79..4990ad9af 100644 --- a/Makefile +++ b/Makefile @@ -54,12 +54,10 @@ update-buf: $(node_modules) .PHONY: build-buf build-buf: $(node_modules) clean-buf - $(buf) generate buf.build/googleapis/googleapis - # TODO(RSDK-5362): remove hardcoded pin and create a sane way to pin protos - # See this thread for more details: https://viaminc.slack.com/archives/C039G724TKP/p1697119526822429 - $(buf) generate buf.build/viamrobotics/api:2109757288234ffc8248121f60437cdd --path common,component,robot,service,app - $(buf) generate buf.build/erdaniels/gostream - $(buf) generate buf.build/viamrobotics/goutils + $(buf) generate $$(./scripts/get-buf-lock-version.js buf.build/googleapis/googleapis) + $(buf) generate $$(./scripts/get-buf-lock-version.js buf.build/viamrobotics/api) --path common,component,robot,service,app + $(buf) generate $$(./scripts/get-buf-lock-version.js buf.build/erdaniels/gostream) + $(buf) generate $$(./scripts/get-buf-lock-version.js buf.build/viamrobotics/goutils) # js targets diff --git a/buf.lock b/buf.lock index b26961818..9ee74e78c 100644 --- a/buf.lock +++ b/buf.lock @@ -1,16 +1,21 @@ # Generated by buf. DO NOT EDIT. version: v1 deps: + - remote: buf.build + owner: erdaniels + repository: gostream + commit: ae00de34a29e41ed96578beb4a84ae9e + digest: shake256:98cdbd37fd64db3f5b2e463863b1231af2653f155931de0655687758a0b312f8d60314060cd3caa8232f37e69fbb38de93057e6905aa29ee6aed4aca8b575421 - remote: buf.build owner: googleapis repository: googleapis - commit: 62f35d8aed1149c291d606d958a7ce32 - digest: shake256:c5f5c2401cf70b7c9719834954f31000a978397fdfebda861419bb4ab90fa8efae92710fddab0820533908a1e25ed692a8e119432b7b260c895087a4975b32f3 + commit: 28151c0d0a1641bf938a7672c500e01d + digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de - remote: buf.build owner: viamrobotics repository: api - commit: d7164997b0af45e1bceb246a9cd44020 - digest: shake256:ed4a0f4e3e9a4df0a8d3413ab214190f187ee25b9954aa789143c35e47d74dbce20770b0d84a6a6eda60e8985f57f6f68218cf80cfab2e1ab3244a93d0d4d2d0 + commit: 2109757288234ffc8248121f60437cdd + digest: shake256:18027527c16555ead747df632f73fecce3e2e489da437a35c175826d89472cce8323f32b9fa74261ca322e58e81aedcfce4d7cdc776b65eceb57dacacfe4822d - remote: buf.build owner: viamrobotics repository: goutils diff --git a/buf.yaml b/buf.yaml index 168981dd7..665fdbf8a 100644 --- a/buf.yaml +++ b/buf.yaml @@ -6,5 +6,7 @@ lint: use: - DEFAULT deps: - - buf.build/viamrobotics/goutils + - buf.build/googleapis/googleapis - buf.build/viamrobotics/api + - buf.build/erdaniels/gostream + - buf.build/viamrobotics/goutils diff --git a/doc/dependency_decisions.yml b/doc/dependency_decisions.yml index 2f1b0d76d..67bbbb1fd 100644 --- a/doc/dependency_decisions.yml +++ b/doc/dependency_decisions.yml @@ -74,7 +74,7 @@ :versions: [] :when: 2023-05-01 18:19:05.224492180 Z - - :license - - '@viamrobotics/typescript-config' + - "@viamrobotics/typescript-config" - Apache 2.0 - :who: :why: 'TODO(RSDK-583): why is license finder unable to detect this license automatically?' @@ -89,3 +89,9 @@ :license_links: https://github.com/yinzara/protoc-gen-js/blob/master/LICENSE :versions: [] :when: 2023-05-12 14:28:29.173104997 Z +- - :permit + - ISC + - :who: + :why: + :versions: [] + :when: 2023-10-18 20:31:08.255446206 Z diff --git a/package-lock.json b/package-lock.json index 9fe75c5d1..93b7dff52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,8 @@ "typedoc": "^0.24.1", "typescript": "^5.0.3", "vite": "^4.2.1", - "vitest": "^0.28.4" + "vitest": "^0.28.4", + "yaml": "^2.3.3" } }, "node_modules/@babel/code-frame": { @@ -2717,6 +2718,15 @@ "node": ">=10" } }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -9706,12 +9716,12 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yargs": { @@ -11632,6 +11642,14 @@ "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } } }, "cross-spawn": { @@ -16834,9 +16852,9 @@ "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 86800e5c3..c475df4d7 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "typedoc": "^0.24.1", "typescript": "^5.0.3", "vite": "^4.2.1", - "vitest": "^0.28.4" + "vitest": "^0.28.4", + "yaml": "^2.3.3" } } diff --git a/scripts/get-buf-lock-version.js b/scripts/get-buf-lock-version.js new file mode 100755 index 000000000..385a93362 --- /dev/null +++ b/scripts/get-buf-lock-version.js @@ -0,0 +1,39 @@ +#!/usr/bin/env node + +/** + * RSDK-5362: This script gets the pinned version of a buf proto from the + * buf.lock file. We need this to generate pinned versions of our protos. + * + * If we find a way to make `buf generate` build proto apis using the versions + * stored in buf.lock directly then we can retire this script. + * + * See this thread for more details: + * https://viaminc.slack.com/archives/C039G724TKP/p1697119526822429 + */ + +'use strict'; + +const fs = require('node:fs'); +const YAML = require('yaml'); + +const buflockPath = './buf.lock'; + +const input = process.argv[2]; +if (!input) { + throw new Error('Please specify a buf proto'); +} + +const [remote, owner, repository] = input.split('/'); + +const buflock = fs.readFileSync(buflockPath, 'utf8'); +const parsed = YAML.parse(buflock); + +const { commit } = parsed.deps.find( + (dep) => + dep.remote === remote && + dep.owner === owner && + dep.repository === repository +); +const pinnedDep = `${remote}/${owner}/${repository}:${commit}`; + +console.log(pinnedDep); diff --git a/tsconfig.node.json b/tsconfig.node.json index d3deb32bb..9aa7aeec9 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -4,5 +4,5 @@ "noEmit": true }, "include": ["./vite.config.ts", "./*.cjs", "./.*.cjs"], - "exclude": ["**/src/**", "**/examples/**"] + "exclude": ["**/src/**", "**/examples/**", "**/scripts/**"] }