diff --git a/packages/grpc-js/package.json b/packages/grpc-js/package.json index 0a4ec9dd..dfa8d483 100644 --- a/packages/grpc-js/package.json +++ b/packages/grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@grpc/grpc-js", - "version": "0.6.15", + "version": "0.6.16", "description": "gRPC Library for Node - pure JS implementation", "homepage": "https://grpc.io/", "repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js", diff --git a/packages/grpc-js/src/call-stream.ts b/packages/grpc-js/src/call-stream.ts index c1e9b3b5..80933fb4 100644 --- a/packages/grpc-js/src/call-stream.ts +++ b/packages/grpc-js/src/call-stream.ts @@ -163,6 +163,9 @@ export class Http2CallStream extends Duplex implements Call { * @param status The status of the call. */ private endCall(status: StatusObject): void { + /* Once endCall is called, we are definitely not using the http2 stream + * anymore, so we can always safely destroy it here */ + this.destroyHttp2Stream(); if (this.finalStatus === null) { this.trace( 'ended with status: code=' + @@ -246,9 +249,7 @@ export class Http2CallStream extends Duplex implements Call { private tryPush(messageBytes: Buffer | null): void { if (this.isReadFilterPending) { this.trace( - '[' + - this.callNumber + - '] unfilteredReadMessages.push message of length ' + + 'unfilteredReadMessages.push message of length ' + (messageBytes && messageBytes.length) ); this.unfilteredReadMessages.push(messageBytes); @@ -422,10 +423,15 @@ export class Http2CallStream extends Duplex implements Call { if (!this.pendingWriteCallback) { throw new Error('Invalid state in write handling code'); } + this.trace( + 'sending data chunk of length ' + + this.pendingWrite.length + + ' (deferred)' + ); stream.write(this.pendingWrite, this.pendingWriteCallback); } if (this.pendingFinalCallback) { - this.trace('calling end() on HTTP/2 stream'); + this.trace('calling end() on HTTP/2 stream (deferred)'); stream.end(this.pendingFinalCallback); } } @@ -514,9 +520,13 @@ export class Http2CallStream extends Duplex implements Call { this.trace('write() called with message of length ' + chunk.message.length); this.filterStack.sendMessage(Promise.resolve(chunk)).then(message => { if (this.http2Stream === null) { + this.trace( + 'deferring writing data chunk of length ' + message.message.length + ); this.pendingWrite = message.message; this.pendingWriteCallback = cb; } else { + this.trace('sending data chunk of length ' + message.message.length); this.http2Stream.write(message.message, cb); } }, this.handleFilterError.bind(this)); @@ -525,6 +535,7 @@ export class Http2CallStream extends Duplex implements Call { _final(cb: Function) { this.trace('end() called'); if (this.http2Stream === null) { + this.trace('deferring calling end() on HTTP/2 stream'); this.pendingFinalCallback = cb; } else { this.trace('calling end() on HTTP/2 stream'); diff --git a/packages/grpc-js/src/channel-credentials.ts b/packages/grpc-js/src/channel-credentials.ts index f42c7e93..5d5b87d5 100644 --- a/packages/grpc-js/src/channel-credentials.ts +++ b/packages/grpc-js/src/channel-credentials.ts @@ -18,7 +18,7 @@ import { ConnectionOptions, createSecureContext, PeerCertificate } from 'tls'; import { CallCredentials } from './call-credentials'; -import {CIPHER_SUITES, getDefaultRootsData} from './tls-helpers'; +import { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers'; // tslint:disable-next-line:no-any function verifyIsBufferOrNull(obj: any, friendlyName: string): void { @@ -190,7 +190,7 @@ class SecureChannelCredentialsImpl extends ChannelCredentials { ca: rootCerts || undefined, key: privateKey || undefined, cert: certChain || undefined, - ciphers: CIPHER_SUITES + ciphers: CIPHER_SUITES, }); this.connectionOptions = { secureContext }; if (verifyOptions && verifyOptions.checkServerIdentity) { diff --git a/packages/grpc-js/src/channel.ts b/packages/grpc-js/src/channel.ts index 6cf987cb..6242fc3c 100644 --- a/packages/grpc-js/src/channel.ts +++ b/packages/grpc-js/src/channel.ts @@ -38,6 +38,7 @@ import { getDefaultAuthority } from './resolver'; import { LoadBalancingConfig } from './load-balancing-config'; import { ServiceConfig, validateServiceConfig } from './service-config'; import { trace } from './logging'; +import { SubchannelAddress } from './subchannel'; export enum ConnectivityState { CONNECTING, @@ -142,10 +143,12 @@ export class ChannelImplementation implements Channel { ) { /* The global boolean parameter to getSubchannelPool has the inverse meaning to what * the grpc.use_local_subchannel_pool channel option means. */ - this.subchannelPool = getSubchannelPool((options['grpc.use_local_subchannel_pool'] ?? 0) === 0); + this.subchannelPool = getSubchannelPool( + (options['grpc.use_local_subchannel_pool'] ?? 0) === 0 + ); const channelControlHelper: ChannelControlHelper = { createSubchannel: ( - subchannelAddress: string, + subchannelAddress: SubchannelAddress, subchannelArgs: ChannelOptions ) => { return this.subchannelPool.getOrCreateSubchannel( @@ -234,16 +237,25 @@ export class ChannelImplementation implements Channel { callStream ); } catch (error) { - callStream.cancelWithStatus( - Status.UNAVAILABLE, - 'Failed to start call on picked subchannel' - ); + /* An error here indicates that something went wrong with + * the picked subchannel's http2 stream right before we + * tried to start the stream. We are handling a promise + * result here, so this is asynchronous with respect to the + * original tryPick call, so calling it again is not + * recursive. We call tryPick immediately instead of + * queueing this pick again because handling the queue is + * triggered by state changes, and we want to immediately + * check if the state has already changed since the + * previous tryPick call. We do this instead of cancelling + * the stream because the correct behavior may be + * re-queueing instead, based on the logic in the rest of + * tryPick */ + this.tryPick(callStream, callMetadata); } } else { - callStream.cancelWithStatus( - Status.UNAVAILABLE, - 'Connection dropped while starting call' - ); + /* The logic for doing this here is the same as in the catch + * block above */ + this.tryPick(callStream, callMetadata); } }, (error: Error & { code: number }) => { diff --git a/packages/grpc-js/src/http_proxy.ts b/packages/grpc-js/src/http_proxy.ts index 18a6fd48..a3ba0f58 100644 --- a/packages/grpc-js/src/http_proxy.ts +++ b/packages/grpc-js/src/http_proxy.ts @@ -22,6 +22,7 @@ import { parseTarget } from "./resolver-dns"; import { Socket } from "net"; import * as http from 'http'; import * as logging from './logging'; +import { SubchannelAddress, TcpSubchannelAddress, isTcpSubchannelAddress } from "./subchannel"; const TRACER_NAME = 'proxy'; @@ -123,15 +124,16 @@ export function shouldUseProxy(target: string): boolean { return true; } -export function getProxiedConnection(target: string, subchannelAddress: string): Promise { - if (!(PROXY_INFO.address && shouldUseProxy(target))) { +export function getProxiedConnection(target: string, subchannelAddress: SubchannelAddress): Promise { + if (!(PROXY_INFO.address && shouldUseProxy(target) && isTcpSubchannelAddress(subchannelAddress))) { return Promise.reject(); } + const subchannelAddressPathString = `${subchannelAddress.host}:${subchannelAddress.port}`; trace('Using proxy ' + PROXY_INFO.address + ' to connect to ' + target + ' at ' + subchannelAddress); const options: http.RequestOptions = { method: 'CONNECT', host: PROXY_INFO.address, - path: subchannelAddress + path: subchannelAddressPathString }; if (PROXY_INFO.creds) { options.headers = { diff --git a/packages/grpc-js/src/load-balancer-pick-first.ts b/packages/grpc-js/src/load-balancer-pick-first.ts index a5fbf0fa..52ce8457 100644 --- a/packages/grpc-js/src/load-balancer-pick-first.ts +++ b/packages/grpc-js/src/load-balancer-pick-first.ts @@ -30,7 +30,11 @@ import { UnavailablePicker, } from './picker'; import { LoadBalancingConfig } from './load-balancing-config'; -import { Subchannel, ConnectivityStateListener } from './subchannel'; +import { + Subchannel, + ConnectivityStateListener, + SubchannelAddress, +} from './subchannel'; import * as logging from './logging'; import { LogVerbosity } from './constants'; @@ -76,7 +80,7 @@ export class PickFirstLoadBalancer implements LoadBalancer { /** * The list of backend addresses most recently passed to `updateAddressList`. */ - private latestAddressList: string[] = []; + private latestAddressList: SubchannelAddress[] = []; /** * The list of subchannels this load balancer is currently attempting to * connect to. @@ -369,7 +373,7 @@ export class PickFirstLoadBalancer implements LoadBalancer { } updateAddressList( - addressList: string[], + addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig | null ): void { // lbConfig has no useful information for pick first load balancing diff --git a/packages/grpc-js/src/load-balancer-round-robin.ts b/packages/grpc-js/src/load-balancer-round-robin.ts index e3eedfe5..4956e11e 100644 --- a/packages/grpc-js/src/load-balancer-round-robin.ts +++ b/packages/grpc-js/src/load-balancer-round-robin.ts @@ -30,7 +30,11 @@ import { UnavailablePicker, } from './picker'; import { LoadBalancingConfig } from './load-balancing-config'; -import { Subchannel, ConnectivityStateListener } from './subchannel'; +import { + Subchannel, + ConnectivityStateListener, + SubchannelAddress, +} from './subchannel'; const TYPE_NAME = 'round_robin'; @@ -168,7 +172,7 @@ export class RoundRobinLoadBalancer implements LoadBalancer { } updateAddressList( - addressList: string[], + addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig | null ): void { this.resetSubchannelList(); diff --git a/packages/grpc-js/src/load-balancer.ts b/packages/grpc-js/src/load-balancer.ts index 69114521..5fa4bdc5 100644 --- a/packages/grpc-js/src/load-balancer.ts +++ b/packages/grpc-js/src/load-balancer.ts @@ -16,7 +16,7 @@ */ import { ChannelOptions } from './channel-options'; -import { Subchannel } from './subchannel'; +import { Subchannel, SubchannelAddress } from './subchannel'; import { ConnectivityState } from './channel'; import { Picker } from './picker'; import { LoadBalancingConfig } from './load-balancing-config'; @@ -34,7 +34,7 @@ export interface ChannelControlHelper { * @param subchannelArgs Extra channel arguments specified by the load balancer */ createSubchannel( - subchannelAddress: string, + subchannelAddress: SubchannelAddress, subchannelArgs: ChannelOptions ): Subchannel; /** @@ -66,7 +66,7 @@ export interface LoadBalancer { * if one was provided */ updateAddressList( - addressList: string[], + addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig | null ): void; /** diff --git a/packages/grpc-js/src/metadata.ts b/packages/grpc-js/src/metadata.ts index 4b41aa25..630fb99a 100644 --- a/packages/grpc-js/src/metadata.ts +++ b/packages/grpc-js/src/metadata.ts @@ -174,7 +174,7 @@ export class Metadata { * @return The newly cloned object. */ clone(): Metadata { - const newMetadata = new Metadata(); + const newMetadata = new Metadata(this.options); const newInternalRepr = newMetadata.internalRepr; this.internalRepr.forEach((value, key) => { diff --git a/packages/grpc-js/src/resolver-dns.ts b/packages/grpc-js/src/resolver-dns.ts index 3100d3f6..feec8f63 100644 --- a/packages/grpc-js/src/resolver-dns.ts +++ b/packages/grpc-js/src/resolver-dns.ts @@ -30,6 +30,7 @@ import { StatusObject } from './call-stream'; import { Metadata } from './metadata'; import * as logging from './logging'; import { LogVerbosity } from './constants'; +import { SubchannelAddress, TcpSubchannelAddress } from './subchannel'; const TRACER_NAME = 'dns_resolver'; @@ -112,7 +113,7 @@ const dnsLookupPromise = util.promisify(dns.lookup); * @param target * @return An "IP:port" string in an array if parsing was successful, `null` otherwise */ -function parseIP(target: string): string[] | null { +function parseIP(target: string): SubchannelAddress[] | null { /* These three regular expressions are all mutually exclusive, so we just * want the first one that matches the target string, if any do. */ const ipv4Match = IPV4_REGEX.exec(target); @@ -123,14 +124,14 @@ function parseIP(target: string): string[] | null { } // ipv6 addresses should be bracketed - const addr = ipv4Match ? match[1] : `[${match[1]}]`; + const addr = match[1]; let port: string; if (match[2]) { port = match[2]; } else { port = DEFAULT_PORT; } - return [`${addr}:${port}`]; + return [{ host: addr, port: +port }]; } /** @@ -161,7 +162,7 @@ function mergeArrays(...arrays: T[][]): T[] { * Resolver implementation that handles DNS names and IP addresses. */ class DnsResolver implements Resolver { - private readonly ipResult: string[] | null; + private readonly ipResult: SubchannelAddress[] | null; private readonly dnsHostname: string | null; private readonly port: string | null; /* The promise results here contain, in order, the A record, the AAAA record, @@ -222,23 +223,28 @@ class DnsResolver implements Resolver { this.pendingResultPromise.then( ([addressList, txtRecord]) => { this.pendingResultPromise = null; - const ip4Addresses: string[] = addressList - .filter(addr => addr.family === 4) - .map(addr => `${addr.address}:${this.port}`); - let ip6Addresses: string[]; + const ip4Addresses: dns.LookupAddress[] = addressList.filter( + addr => addr.family === 4 + ); + let ip6Addresses: dns.LookupAddress[]; if (semver.satisfies(process.version, IPV6_SUPPORT_RANGE)) { - ip6Addresses = addressList - .filter(addr => addr.family === 6) - .map(addr => `[${addr.address}]:${this.port}`); + ip6Addresses = addressList.filter(addr => addr.family === 6); } else { ip6Addresses = []; } - const allAddresses: string[] = mergeArrays( + const allAddresses: TcpSubchannelAddress[] = mergeArrays( ip4Addresses, ip6Addresses - ); + ).map(addr => ({ host: addr.address, port: +this.port! })); + const allAddressesString: string = + '[' + + allAddresses.map(addr => addr.host + ':' + addr.port).join(',') + + ']'; trace( - 'Resolved addresses for target ' + this.target + ': ' + allAddresses + 'Resolved addresses for target ' + + this.target + + ': ' + + allAddressesString ); if (allAddresses.length === 0) { this.listener.onError(this.defaultResolutionError); diff --git a/packages/grpc-js/src/resolver-uds.ts b/packages/grpc-js/src/resolver-uds.ts index 536a018b..91128d2c 100644 --- a/packages/grpc-js/src/resolver-uds.ts +++ b/packages/grpc-js/src/resolver-uds.ts @@ -20,6 +20,7 @@ import { registerResolver, registerDefaultResolver, } from './resolver'; +import { SubchannelAddress } from './subchannel'; function getUdsName(target: string): string { /* Due to how this resolver is registered, it should only be constructed @@ -34,9 +35,9 @@ function getUdsName(target: string): string { } class UdsResolver implements Resolver { - private addresses: string[] = []; + private addresses: SubchannelAddress[] = []; constructor(target: string, private listener: ResolverListener) { - this.addresses = [getUdsName(target)]; + this.addresses = [{ path: getUdsName(target) }]; } updateResolution(): void { process.nextTick( diff --git a/packages/grpc-js/src/resolver.ts b/packages/grpc-js/src/resolver.ts index 3af5da9c..b2be310f 100644 --- a/packages/grpc-js/src/resolver.ts +++ b/packages/grpc-js/src/resolver.ts @@ -20,6 +20,7 @@ import { ServiceConfig } from './service-config'; import * as resolver_dns from './resolver-dns'; import * as resolver_uds from './resolver-uds'; import { StatusObject } from './call-stream'; +import { SubchannelAddress } from './subchannel'; /** * A listener object passed to the resolver's constructor that provides name @@ -36,7 +37,7 @@ export interface ResolverListener { * service configuration was invalid */ onSuccessfulResolution( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ): void; diff --git a/packages/grpc-js/src/resolving-load-balancer.ts b/packages/grpc-js/src/resolving-load-balancer.ts index 496e1345..a9ba0594 100644 --- a/packages/grpc-js/src/resolving-load-balancer.ts +++ b/packages/grpc-js/src/resolving-load-balancer.ts @@ -34,6 +34,7 @@ import { StatusObject } from './call-stream'; import { Metadata } from './metadata'; import * as logging from './logging'; import { LogVerbosity } from './constants'; +import { SubchannelAddress } from './subchannel'; const TRACER_NAME = 'resolving_load_balancer'; @@ -132,7 +133,7 @@ export class ResolvingLoadBalancer implements LoadBalancer { this.updateState(ConnectivityState.IDLE, new QueuePicker(this)); this.innerResolver = createResolver(target, { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: ServiceError | null ) => { @@ -243,7 +244,7 @@ export class ResolvingLoadBalancer implements LoadBalancer { this.innerChannelControlHelper = { createSubchannel: ( - subchannelAddress: string, + subchannelAddress: SubchannelAddress, subchannelArgs: ChannelOptions ) => { return this.channelControlHelper.createSubchannel( @@ -289,7 +290,7 @@ export class ResolvingLoadBalancer implements LoadBalancer { this.replacementChannelControlHelper = { createSubchannel: ( - subchannelAddress: string, + subchannelAddress: SubchannelAddress, subchannelArgs: ChannelOptions ) => { return this.channelControlHelper.createSubchannel( @@ -409,7 +410,7 @@ export class ResolvingLoadBalancer implements LoadBalancer { } updateAddressList( - addressList: string[], + addressList: SubchannelAddress[], lbConfig: LoadBalancingConfig | null ) { throw new Error('updateAddressList not supported on ResolvingLoadBalancer'); diff --git a/packages/grpc-js/src/server-credentials.ts b/packages/grpc-js/src/server-credentials.ts index b56cb68a..17ab2980 100644 --- a/packages/grpc-js/src/server-credentials.ts +++ b/packages/grpc-js/src/server-credentials.ts @@ -16,7 +16,7 @@ */ import { SecureServerOptions } from 'http2'; -import {CIPHER_SUITES, getDefaultRootsData} from './tls-helpers'; +import { CIPHER_SUITES, getDefaultRootsData } from './tls-helpers'; export interface KeyCertPair { private_key: Buffer; @@ -75,7 +75,7 @@ export abstract class ServerCredentials { cert, key, requestCert: checkClientCertificate, - ciphers: CIPHER_SUITES + ciphers: CIPHER_SUITES, }); } } diff --git a/packages/grpc-js/src/server.ts b/packages/grpc-js/src/server.ts index 03fcfaf9..a2db30be 100644 --- a/packages/grpc-js/src/server.ts +++ b/packages/grpc-js/src/server.ts @@ -203,11 +203,16 @@ export class Server { const options: ListenOptions = { host: url.hostname, port: +url.port }; const serverOptions: http2.ServerOptions = {}; if ('grpc.max_concurrent_streams' in this.options) { - serverOptions.settings = {maxConcurrentStreams: this.options['grpc.max_concurrent_streams']}; + serverOptions.settings = { + maxConcurrentStreams: this.options['grpc.max_concurrent_streams'], + }; } if (creds._isSecure()) { - const secureServerOptions = Object.assign(serverOptions, creds._getSettings()!); + const secureServerOptions = Object.assign( + serverOptions, + creds._getSettings()! + ); this.http2Server = http2.createSecureServer(secureServerOptions); } else { this.http2Server = http2.createServer(serverOptions); diff --git a/packages/grpc-js/src/subchannel-pool.ts b/packages/grpc-js/src/subchannel-pool.ts index 009141e3..61a4e13c 100644 --- a/packages/grpc-js/src/subchannel-pool.ts +++ b/packages/grpc-js/src/subchannel-pool.ts @@ -16,7 +16,11 @@ */ import { ChannelOptions, channelOptionsEqual } from './channel-options'; -import { Subchannel } from './subchannel'; +import { + Subchannel, + SubchannelAddress, + subchannelAddressEqual, +} from './subchannel'; import { ChannelCredentials } from './channel-credentials'; // 10 seconds in milliseconds. This value is arbitrary. @@ -28,13 +32,12 @@ const REF_CHECK_INTERVAL = 10_000; export class SubchannelPool { private pool: { - [channelTarget: string]: { - [subchannelTarget: string]: Array<{ - channelArguments: ChannelOptions; - channelCredentials: ChannelCredentials; - subchannel: Subchannel; - }>; - }; + [channelTarget: string]: Array<{ + subchannelAddress: SubchannelAddress; + channelArguments: ChannelOptions; + channelCredentials: ChannelCredentials; + subchannel: Subchannel; + }>; } = Object.create(null); /** @@ -62,23 +65,20 @@ export class SubchannelPool { * do not need to be filtered */ // tslint:disable-next-line:forin for (const channelTarget in this.pool) { - // tslint:disable-next-line:forin - for (const subchannelTarget in this.pool[channelTarget]) { - const subchannelObjArray = this.pool[channelTarget][subchannelTarget]; + const subchannelObjArray = this.pool[channelTarget]; - const refedSubchannels = subchannelObjArray.filter( - value => !value.subchannel.unrefIfOneRef() - ); + const refedSubchannels = subchannelObjArray.filter( + value => !value.subchannel.unrefIfOneRef() + ); - if (refedSubchannels.length > 0) { - allSubchannelsUnrefed = false; - } - - /* For each subchannel in the pool, try to unref it if it has - * exactly one ref (which is the ref from the pool itself). If that - * does happen, remove the subchannel from the pool */ - this.pool[channelTarget][subchannelTarget] = refedSubchannels; + if (refedSubchannels.length > 0) { + allSubchannelsUnrefed = false; } + + /* For each subchannel in the pool, try to unref it if it has + * exactly one ref (which is the ref from the pool itself). If that + * does happen, remove the subchannel from the pool */ + this.pool[channelTarget] = refedSubchannels; } /* Currently we do not delete keys with empty values. If that results * in significant memory usage we should change it. */ @@ -114,25 +114,27 @@ export class SubchannelPool { */ getOrCreateSubchannel( channelTarget: string, - subchannelTarget: string, + subchannelTarget: SubchannelAddress, channelArguments: ChannelOptions, channelCredentials: ChannelCredentials ): Subchannel { this.ensureCleanupTask(); if (channelTarget in this.pool) { - if (subchannelTarget in this.pool[channelTarget]) { - const subchannelObjArray = this.pool[channelTarget][subchannelTarget]; - for (const subchannelObj of subchannelObjArray) { - if ( - channelOptionsEqual( - channelArguments, - subchannelObj.channelArguments - ) && - channelCredentials._equals(subchannelObj.channelCredentials) - ) { - return subchannelObj.subchannel; - } + const subchannelObjArray = this.pool[channelTarget]; + for (const subchannelObj of subchannelObjArray) { + if ( + subchannelAddressEqual( + subchannelTarget, + subchannelObj.subchannelAddress + ) && + channelOptionsEqual( + channelArguments, + subchannelObj.channelArguments + ) && + channelCredentials._equals(subchannelObj.channelCredentials) + ) { + return subchannelObj.subchannel; } } } @@ -144,12 +146,10 @@ export class SubchannelPool { channelCredentials ); if (!(channelTarget in this.pool)) { - this.pool[channelTarget] = Object.create(null); + this.pool[channelTarget] = []; } - if (!(subchannelTarget in this.pool[channelTarget])) { - this.pool[channelTarget][subchannelTarget] = []; - } - this.pool[channelTarget][subchannelTarget].push({ + this.pool[channelTarget].push({ + subchannelAddress: subchannelTarget, channelArguments, channelCredentials, subchannel, diff --git a/packages/grpc-js/src/subchannel.ts b/packages/grpc-js/src/subchannel.ts index 31ca76fa..66d14621 100644 --- a/packages/grpc-js/src/subchannel.ts +++ b/packages/grpc-js/src/subchannel.ts @@ -20,14 +20,14 @@ import { ChannelCredentials } from './channel-credentials'; import { Metadata } from './metadata'; import { Http2CallStream } from './call-stream'; import { ChannelOptions } from './channel-options'; -import { PeerCertificate, checkServerIdentity } from 'tls'; +import { PeerCertificate, checkServerIdentity, TLSSocket } from 'tls'; import { ConnectivityState } from './channel'; import { BackoffTimeout, BackoffOptions } from './backoff-timeout'; import { getDefaultAuthority } from './resolver'; import * as logging from './logging'; import { LogVerbosity } from './constants'; -import { Socket } from 'net'; import { shouldUseProxy, getProxiedConnection } from './http_proxy'; +import * as net from 'net'; const { version: clientVersion } = require('../../package.json'); @@ -75,6 +75,44 @@ function uniformRandom(min: number, max: number) { const tooManyPingsData: Buffer = Buffer.from('too_many_pings', 'ascii'); +export interface TcpSubchannelAddress { + port: number; + host: string; +} + +export interface IpcSubchannelAddress { + path: string; +} + +/** + * This represents a single backend address to connect to. This interface is a + * subset of net.SocketConnectOpts, i.e. the options described at + * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener. + * Those are in turn a subset of the options that can be passed to http2.connect. + */ +export type SubchannelAddress = TcpSubchannelAddress | IpcSubchannelAddress; + +export function isTcpSubchannelAddress( + address: SubchannelAddress +): address is TcpSubchannelAddress { + return 'port' in address; +} + +export function subchannelAddressEqual( + address1: SubchannelAddress, + address2: SubchannelAddress +): boolean { + if (isTcpSubchannelAddress(address1)) { + return ( + isTcpSubchannelAddress(address2) && + address1.host === address2.host && + address1.port === address2.port + ); + } else { + return !isTcpSubchannelAddress(address2) && address1.path === address2.path; + } +} + export class Subchannel { /** * The subchannel's current connectivity state. Invariant: `session` === `null` @@ -137,6 +175,11 @@ export class Subchannel { */ private refcount = 0; + /** + * A string representation of the subchannel address, for logging/tracing + */ + private subchannelAddressString: string; + /** * A class representing a connection to a single backend. * @param channelTarget The target string for the channel as a whole @@ -149,7 +192,7 @@ export class Subchannel { */ constructor( private channelTarget: string, - private subchannelAddress: string, + private subchannelAddress: SubchannelAddress, private options: ChannelOptions, private credentials: ChannelCredentials ) { @@ -174,7 +217,7 @@ export class Subchannel { clearTimeout(this.keepaliveTimeoutId); const backoffOptions: BackoffOptions = { initialDelay: options['grpc.initial_reconnect_backoff_ms'], - maxDelay: options['grpc.max_reconnect_backoff_ms'] + maxDelay: options['grpc.max_reconnect_backoff_ms'], }; this.backoffTimeout = new BackoffTimeout(() => { if (this.continueConnecting) { @@ -189,6 +232,11 @@ export class Subchannel { ); } }, backoffOptions); + if (isTcpSubchannelAddress(subchannelAddress)) { + this.subchannelAddressString = `${subchannelAddress.host}:${subchannelAddress.port}`; + } else { + this.subchannelAddressString = `${subchannelAddress.path}`; + } } /** @@ -226,8 +274,8 @@ export class Subchannel { clearTimeout(this.keepaliveTimeoutId); } - private createSession(socket?: Socket) { - const connectionOptions: http2.SecureClientSessionOptions = + private createSession(socket?: net.Socket) { + let connectionOptions: http2.SecureClientSessionOptions = this.credentials._getConnectionOptions() || {}; if (socket) { connectionOptions.socket = socket; @@ -252,9 +300,40 @@ export class Subchannel { } else { connectionOptions.servername = getDefaultAuthority(this.channelTarget); } + } else { + /* In all but the most recent versions of Node, http2.connect does not use + * the options when establishing plaintext connections, so we need to + * establish that connection explicitly. */ + connectionOptions.createConnection = (authority, option) => { + /* net.NetConnectOpts is declared in a way that is more restrictive + * than what net.connect will actually accept, so we use the type + * assertion to work around that. */ + return net.connect(this.subchannelAddress as net.NetConnectOpts); + }; } + connectionOptions = Object.assign( + connectionOptions, + this.subchannelAddress + ); + /* http2.connect uses the options here: + * https://github.com/nodejs/node/blob/70c32a6d190e2b5d7b9ff9d5b6a459d14e8b7d59/lib/internal/http2/core.js#L3028-L3036 + * The spread operator overides earlier values with later ones, so any port + * or host values in the options will be used rather than any values extracted + * from the first argument. In addition, the path overrides the host and port, + * as documented for plaintext connections here: + * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener + * and for TLS connections here: + * https://nodejs.org/api/tls.html#tls_tls_connect_options_callback. In + * earlier versions of Node, http2.connect passes these options to + * tls.connect but not net.connect, so in the insecure case we still need + * to set the createConnection option above to create the connection + * explicitly. We cannot do that in the TLS case because http2.connect + * passes necessary additional options to tls.connect. + * The first argument just needs to be parseable as a URL and the scheme + * determines whether the connection will be established over TLS or not. + */ const session = http2.connect( - addressScheme + this.subchannelAddress, + addressScheme + getDefaultAuthority(this.channelTarget), connectionOptions ); this.session = session; @@ -345,7 +424,7 @@ export class Subchannel { return false; } trace( - this.subchannelAddress + + this.subchannelAddressString + ' ' + ConnectivityState[this.connectivityState] + ' -> ' + @@ -417,7 +496,7 @@ export class Subchannel { callRef() { trace( - this.subchannelAddress + + this.subchannelAddressString + ' callRefcount ' + this.callRefcount + ' -> ' + @@ -434,7 +513,7 @@ export class Subchannel { callUnref() { trace( - this.subchannelAddress + + this.subchannelAddressString + ' callRefcount ' + this.callRefcount + ' -> ' + @@ -452,7 +531,7 @@ export class Subchannel { ref() { trace( - this.subchannelAddress + + this.subchannelAddressString + ' callRefcount ' + this.refcount + ' -> ' + @@ -463,7 +542,7 @@ export class Subchannel { unref() { trace( - this.subchannelAddress + + this.subchannelAddressString + ' callRefcount ' + this.refcount + ' -> ' + @@ -574,6 +653,6 @@ export class Subchannel { } getAddress(): string { - return this.subchannelAddress; + return this.subchannelAddressString; } } diff --git a/packages/grpc-js/src/tls-helpers.ts b/packages/grpc-js/src/tls-helpers.ts index 161666ed..3f7a62e7 100644 --- a/packages/grpc-js/src/tls-helpers.ts +++ b/packages/grpc-js/src/tls-helpers.ts @@ -17,7 +17,8 @@ import * as fs from 'fs'; -export const CIPHER_SUITES: string | undefined = process.env.GRPC_SSL_CIPHER_SUITES; +export const CIPHER_SUITES: string | undefined = + process.env.GRPC_SSL_CIPHER_SUITES; const DEFAULT_ROOTS_FILE_PATH = process.env.GRPC_DEFAULT_SSL_ROOTS_FILE_PATH; @@ -31,4 +32,4 @@ export function getDefaultRootsData(): Buffer | null { return defaultRootsData; } return null; -} \ No newline at end of file +} diff --git a/packages/grpc-js/test/test-resolver.ts b/packages/grpc-js/test/test-resolver.ts index 951291a6..ebb4d567 100644 --- a/packages/grpc-js/test/test-resolver.ts +++ b/packages/grpc-js/test/test-resolver.ts @@ -21,6 +21,7 @@ import * as assert from 'assert'; import * as resolverManager from '../src/resolver'; import { ServiceConfig } from '../src/service-config'; import { StatusObject } from '../src/call-stream'; +import { SubchannelAddress, isTcpSubchannelAddress } from '../src/subchannel'; describe('Name Resolver', () => { describe('DNS Names', function() { @@ -33,11 +34,18 @@ describe('Name Resolver', () => { const target = 'localhost:50051'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('127.0.0.1:50051')); + assert( + addressList.some( + addr => + isTcpSubchannelAddress(addr) && + addr.host === '127.0.0.1' && + addr.port === 50051 + ) + ); // We would check for the IPv6 address but it needs to be omitted on some Node versions done(); }, @@ -52,11 +60,18 @@ describe('Name Resolver', () => { const target = 'localhost'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('127.0.0.1:443')); + assert( + addressList.some( + addr => + isTcpSubchannelAddress(addr) && + addr.host === '127.0.0.1' && + addr.port === 443 + ) + ); // We would check for the IPv6 address but it needs to be omitted on some Node versions done(); }, @@ -71,11 +86,18 @@ describe('Name Resolver', () => { const target = '1.2.3.4'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('1.2.3.4:443')); + assert( + addressList.some( + addr => + isTcpSubchannelAddress(addr) && + addr.host === '1.2.3.4' && + addr.port === 443 + ) + ); // We would check for the IPv6 address but it needs to be omitted on some Node versions done(); }, @@ -90,11 +112,18 @@ describe('Name Resolver', () => { const target = '::1'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('[::1]:443')); + assert( + addressList.some( + addr => + isTcpSubchannelAddress(addr) && + addr.host === '::1' && + addr.port === 443 + ) + ); // We would check for the IPv6 address but it needs to be omitted on some Node versions done(); }, @@ -109,11 +138,18 @@ describe('Name Resolver', () => { const target = '[::1]:50051'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('[::1]:50051')); + assert( + addressList.some( + addr => + isTcpSubchannelAddress(addr) && + addr.host === '::1' && + addr.port === 50051 + ) + ); // We would check for the IPv6 address but it needs to be omitted on some Node versions done(); }, @@ -128,7 +164,7 @@ describe('Name Resolver', () => { const target = 'example.com'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { @@ -146,7 +182,7 @@ describe('Name Resolver', () => { const target = 'loopback4.unittest.grpc.io'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { @@ -166,7 +202,7 @@ describe('Name Resolver', () => { const target = 'network-tools.com'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { @@ -196,7 +232,7 @@ describe('Name Resolver', () => { const target2 = 'grpc-test4.sandbox.googleapis.com'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { @@ -218,11 +254,15 @@ describe('Name Resolver', () => { const target = 'unix:socket'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('socket')); + assert( + addressList.some( + addr => !isTcpSubchannelAddress(addr) && addr.path === 'socket' + ) + ); done(); }, onError: (error: StatusObject) => { @@ -236,11 +276,16 @@ describe('Name Resolver', () => { const target = 'unix:///tmp/socket'; const listener: resolverManager.ResolverListener = { onSuccessfulResolution: ( - addressList: string[], + addressList: SubchannelAddress[], serviceConfig: ServiceConfig | null, serviceConfigError: StatusObject | null ) => { - assert(addressList.includes('/tmp/socket')); + assert( + addressList.some( + addr => + !isTcpSubchannelAddress(addr) && addr.path === '/tmp/socket' + ) + ); done(); }, onError: (error: StatusObject) => { diff --git a/packages/grpc-native-core/tools/run_tests/artifacts/build_all_linux_artifacts.sh b/packages/grpc-native-core/tools/run_tests/artifacts/build_all_linux_artifacts.sh index 26df28bd..1700f393 100755 --- a/packages/grpc-native-core/tools/run_tests/artifacts/build_all_linux_artifacts.sh +++ b/packages/grpc-native-core/tools/run_tests/artifacts/build_all_linux_artifacts.sh @@ -70,6 +70,7 @@ fi if [ "$DO_CROSS" = "true" ] ; then $tool_dir/build_artifact_node_arm.sh + $tool_dir/build_artifact_node_s390x.sh docker build -t alpine_node_artifact $base_dir/tools/docker/alpine_artifact docker run -e JOBS=8 -e ARTIFACTS_OUT=/var/grpc/artifacts -v $base_dir:/var/grpc alpine_node_artifact /var/grpc/tools/run_tests/artifacts/build_artifact_node.sh --with-alpine diff --git a/packages/grpc-native-core/tools/run_tests/artifacts/build_artifact_node_s390x.sh b/packages/grpc-native-core/tools/run_tests/artifacts/build_artifact_node_s390x.sh new file mode 100755 index 00000000..818d9663 --- /dev/null +++ b/packages/grpc-native-core/tools/run_tests/artifacts/build_artifact_node_s390x.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +set -ex + +# https://github.com/mapbox/node-pre-gyp/issues/362 +npm install -g node-gyp + +cd $(dirname $0)/../../.. + +rm -rf build || true + +mkdir -p "${ARTIFACTS_OUT}" + +npm update + +node_versions=( 4.0.0 5.0.0 6.0.0 7.0.0 8.0.0 9.0.0 10.0.0 11.0.0 12.0.0 13.0.0 ) + +for version in ${node_versions[@]} +do + # Cross compile for s390x on x64 + # Requires debian or ubuntu packages "g++-s390x-linux-gnu". + CC=s390x-linux-gnu-gcc CXX=s390x-linux-gnu-g++ LD=s390x-linux-gnu-g++ ./node_modules/.bin/node-pre-gyp configure rebuild package testpackage --target=$version --target_arch=s390x + cp -r build/stage/* "${ARTIFACTS_OUT}"/ +done diff --git a/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh b/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh new file mode 100755 index 00000000..dbfd2a9c --- /dev/null +++ b/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + +nvm install 10 +nvm use 10 +npm install -g npm +# https://github.com/mapbox/node-pre-gyp/issues/362 +npm install -g node-gyp + +set -ex +cd $(dirname $0)/../../../../.. +base_dir=$(pwd) + +cd $base_dir/packages/grpc-native-core + +# Install gRPC and its submodules. +git submodule update --init --recursive + +pip install mako +./tools/buildgen/generate_projects.sh + +export JOBS=8 +export ARTIFACTS_OUT=$base_dir/artifacts + +mkdir -p ${ARTIFACTS_OUT} + +rm -rf build || true + +npm update + +case $RUNTIME in + electron) + HOME=~/.electron-gyp ./node_modules/.bin/node-pre-gyp configure rebuild package --runtime=electron --target=$VERSION --target_arch=$ARCH --disturl=https://atom.io/download/electron + cp -r build/stage/* "${ARTIFACTS_OUT}"/ + ;; + node) + ./node_modules/.bin/node-pre-gyp configure rebuild package --target=$VERSION --target_arch=$ARCH + cp -r build/stage/* "${ARTIFACTS_OUT}"/ + ;; +esac \ No newline at end of file diff --git a/packages/grpc-native-core/tools/run_tests/artifacts/workflow.sh b/packages/grpc-native-core/tools/run_tests/artifacts/workflow.sh new file mode 100644 index 00000000..20c5ec54 --- /dev/null +++ b/packages/grpc-native-core/tools/run_tests/artifacts/workflow.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/test/api/connectivity_test.js b/test/api/connectivity_test.js index 042c136b..b5d31943 100644 --- a/test/api/connectivity_test.js +++ b/test/api/connectivity_test.js @@ -59,6 +59,29 @@ const serviceImpl = { }; describe(`${anyGrpc.clientName} client -> ${anyGrpc.serverName} server`, function() { + it('client should not wait for ready by default', function(done) { + this.timeout(15000); + const disconnectedClient = new TestServiceClient('foo.test.google.com:50051', clientGrpc.credentials.createInsecure()); + const deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 10); + disconnectedClient.unary({}, {deadline: deadline}, (error, value) =>{ + assert(error); + assert.strictEqual(error.code, clientGrpc.status.UNAVAILABLE); + done(); + }); + }); + it('client should wait for a connection with waitForReady on', function(done) { + this.timeout(15000); + const disconnectedClient = new TestServiceClient('foo.test.google.com:50051', clientGrpc.credentials.createInsecure()); + const metadata = new clientGrpc.Metadata({waitForReady: true}); + const deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 10); + disconnectedClient.unary({}, metadata, {deadline: deadline}, (error, value) =>{ + assert(error); + assert.strictEqual(error.code, clientGrpc.status.DEADLINE_EXCEEDED); + done(); + }); + }); describe('Reconnection', function() { let server1; let server2; diff --git a/tools/release/cross/Dockerfile b/tools/release/cross/Dockerfile index 7dabff9a..1e931250 100644 --- a/tools/release/cross/Dockerfile +++ b/tools/release/cross/Dockerfile @@ -2,7 +2,7 @@ FROM debian:stretch RUN dpkg --add-architecture i386 RUN apt-get update -RUN apt-get install -y curl build-essential g++-aarch64-linux-gnu g++-arm-linux-gnueabihf python libc6-dev:i386 lib32stdc++-6-dev +RUN apt-get install -y curl build-essential g++-aarch64-linux-gnu g++-arm-linux-gnueabihf g++-s390x-linux-gnu python libc6-dev:i386 lib32stdc++-6-dev RUN curl -fsSL get.docker.com | bash RUN mkdir /usr/local/nvm diff --git a/tools/release/kokoro/macos.cfg b/tools/release/kokoro/macos.cfg new file mode 100644 index 00000000..b52902e5 --- /dev/null +++ b/tools/release/kokoro/macos.cfg @@ -0,0 +1,17 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/workflow.sh" diff --git a/tools/release/kokoro/macos/electron_1.0_ia32.cfg b/tools/release/kokoro/macos/electron_1.0_ia32.cfg new file mode 100644 index 00000000..c14493f1 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.0_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.0_x64.cfg b/tools/release/kokoro/macos/electron_1.0_x64.cfg new file mode 100644 index 00000000..de01b329 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.0_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.1_ia32.cfg b/tools/release/kokoro/macos/electron_1.1_ia32.cfg new file mode 100644 index 00000000..71c370c4 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.1_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.1_x64.cfg b/tools/release/kokoro/macos/electron_1.1_x64.cfg new file mode 100644 index 00000000..10f9a525 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.1_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.2_ia32.cfg b/tools/release/kokoro/macos/electron_1.2_ia32.cfg new file mode 100644 index 00000000..3c2136b7 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.2_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.2.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.2_x64.cfg b/tools/release/kokoro/macos/electron_1.2_x64.cfg new file mode 100644 index 00000000..06f2ce56 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.2_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.2.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.3_ia32.cfg b/tools/release/kokoro/macos/electron_1.3_ia32.cfg new file mode 100644 index 00000000..cdaace0d --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.3_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.3.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.3_x64.cfg b/tools/release/kokoro/macos/electron_1.3_x64.cfg new file mode 100644 index 00000000..59241ec3 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.3_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.3.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.4_ia32.cfg b/tools/release/kokoro/macos/electron_1.4_ia32.cfg new file mode 100644 index 00000000..f4359b6c --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.4_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.4.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.4_x64.cfg b/tools/release/kokoro/macos/electron_1.4_x64.cfg new file mode 100644 index 00000000..eadc22a2 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.4_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.4.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.5_ia32.cfg b/tools/release/kokoro/macos/electron_1.5_ia32.cfg new file mode 100644 index 00000000..e70c18c0 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.5_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.5.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.5_x64.cfg b/tools/release/kokoro/macos/electron_1.5_x64.cfg new file mode 100644 index 00000000..d2382a17 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.5_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.5.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.6_ia32.cfg b/tools/release/kokoro/macos/electron_1.6_ia32.cfg new file mode 100644 index 00000000..f074428f --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.6_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.6.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.6_x64.cfg b/tools/release/kokoro/macos/electron_1.6_x64.cfg new file mode 100644 index 00000000..0c93e0d7 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.6_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.6.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.7_ia32.cfg b/tools/release/kokoro/macos/electron_1.7_ia32.cfg new file mode 100644 index 00000000..48d53103 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.7_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.7.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.7_x64.cfg b/tools/release/kokoro/macos/electron_1.7_x64.cfg new file mode 100644 index 00000000..bdef8d3f --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.7_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.7.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.8_ia32.cfg b/tools/release/kokoro/macos/electron_1.8_ia32.cfg new file mode 100644 index 00000000..a0455a72 --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.8_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "1.8.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_1.8_x64.cfg b/tools/release/kokoro/macos/electron_1.8_x64.cfg new file mode 100644 index 00000000..94b3a0cf --- /dev/null +++ b/tools/release/kokoro/macos/electron_1.8_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "1.8.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_2.0_ia32.cfg b/tools/release/kokoro/macos/electron_2.0_ia32.cfg new file mode 100644 index 00000000..137d8ec2 --- /dev/null +++ b/tools/release/kokoro/macos/electron_2.0_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "2.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_2.0_x64.cfg b/tools/release/kokoro/macos/electron_2.0_x64.cfg new file mode 100644 index 00000000..f70f742e --- /dev/null +++ b/tools/release/kokoro/macos/electron_2.0_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "2.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_3.0_ia32.cfg b/tools/release/kokoro/macos/electron_3.0_ia32.cfg new file mode 100644 index 00000000..eee4f303 --- /dev/null +++ b/tools/release/kokoro/macos/electron_3.0_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "3.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_3.0_x64.cfg b/tools/release/kokoro/macos/electron_3.0_x64.cfg new file mode 100644 index 00000000..52df13a8 --- /dev/null +++ b/tools/release/kokoro/macos/electron_3.0_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "3.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_3.1_ia32.cfg b/tools/release/kokoro/macos/electron_3.1_ia32.cfg new file mode 100644 index 00000000..12785e3b --- /dev/null +++ b/tools/release/kokoro/macos/electron_3.1_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "3.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_3.1_x64.cfg b/tools/release/kokoro/macos/electron_3.1_x64.cfg new file mode 100644 index 00000000..02d1a8d3 --- /dev/null +++ b/tools/release/kokoro/macos/electron_3.1_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "3.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_4.1_ia32.cfg b/tools/release/kokoro/macos/electron_4.1_ia32.cfg new file mode 100644 index 00000000..33cf881e --- /dev/null +++ b/tools/release/kokoro/macos/electron_4.1_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "4.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_4.1_x64.cfg b/tools/release/kokoro/macos/electron_4.1_x64.cfg new file mode 100644 index 00000000..5553bce7 --- /dev/null +++ b/tools/release/kokoro/macos/electron_4.1_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "4.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_4.2_ia32.cfg b/tools/release/kokoro/macos/electron_4.2_ia32.cfg new file mode 100644 index 00000000..41746c21 --- /dev/null +++ b/tools/release/kokoro/macos/electron_4.2_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "4.2.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_4.2_x64.cfg b/tools/release/kokoro/macos/electron_4.2_x64.cfg new file mode 100644 index 00000000..b6cf5a70 --- /dev/null +++ b/tools/release/kokoro/macos/electron_4.2_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "4.2.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_5.0_ia32.cfg b/tools/release/kokoro/macos/electron_5.0_ia32.cfg new file mode 100644 index 00000000..e59cf6a6 --- /dev/null +++ b/tools/release/kokoro/macos/electron_5.0_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "5.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_5.0_x64.cfg b/tools/release/kokoro/macos/electron_5.0_x64.cfg new file mode 100644 index 00000000..47de1345 --- /dev/null +++ b/tools/release/kokoro/macos/electron_5.0_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "5.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_6.0_ia32.cfg b/tools/release/kokoro/macos/electron_6.0_ia32.cfg new file mode 100644 index 00000000..10ca9f5e --- /dev/null +++ b/tools/release/kokoro/macos/electron_6.0_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "6.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_6.0_x64.cfg b/tools/release/kokoro/macos/electron_6.0_x64.cfg new file mode 100644 index 00000000..312c27d9 --- /dev/null +++ b/tools/release/kokoro/macos/electron_6.0_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "6.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_6.1_ia32.cfg b/tools/release/kokoro/macos/electron_6.1_ia32.cfg new file mode 100644 index 00000000..45ed07c5 --- /dev/null +++ b/tools/release/kokoro/macos/electron_6.1_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "6.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_6.1_x64.cfg b/tools/release/kokoro/macos/electron_6.1_x64.cfg new file mode 100644 index 00000000..e5167655 --- /dev/null +++ b/tools/release/kokoro/macos/electron_6.1_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "6.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_7.0_ia32.cfg b/tools/release/kokoro/macos/electron_7.0_ia32.cfg new file mode 100644 index 00000000..5824649e --- /dev/null +++ b/tools/release/kokoro/macos/electron_7.0_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "7.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_7.0_x64.cfg b/tools/release/kokoro/macos/electron_7.0_x64.cfg new file mode 100644 index 00000000..38688281 --- /dev/null +++ b/tools/release/kokoro/macos/electron_7.0_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "7.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_7.1_ia32.cfg b/tools/release/kokoro/macos/electron_7.1_ia32.cfg new file mode 100644 index 00000000..4a81c57e --- /dev/null +++ b/tools/release/kokoro/macos/electron_7.1_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "7.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/electron_7.1_x64.cfg b/tools/release/kokoro/macos/electron_7.1_x64.cfg new file mode 100644 index 00000000..a8671b17 --- /dev/null +++ b/tools/release/kokoro/macos/electron_7.1_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "electron" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "7.1.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_10_ia32.cfg b/tools/release/kokoro/macos/node_10_ia32.cfg new file mode 100644 index 00000000..fd1102df --- /dev/null +++ b/tools/release/kokoro/macos/node_10_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "10.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_10_x64.cfg b/tools/release/kokoro/macos/node_10_x64.cfg new file mode 100644 index 00000000..ca306e12 --- /dev/null +++ b/tools/release/kokoro/macos/node_10_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "10.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_11_ia32.cfg b/tools/release/kokoro/macos/node_11_ia32.cfg new file mode 100644 index 00000000..ecd4f3d0 --- /dev/null +++ b/tools/release/kokoro/macos/node_11_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "11.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_11_x64.cfg b/tools/release/kokoro/macos/node_11_x64.cfg new file mode 100644 index 00000000..80542311 --- /dev/null +++ b/tools/release/kokoro/macos/node_11_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "11.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_12_ia32.cfg b/tools/release/kokoro/macos/node_12_ia32.cfg new file mode 100644 index 00000000..7bf3a9a3 --- /dev/null +++ b/tools/release/kokoro/macos/node_12_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "12.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_12_x64.cfg b/tools/release/kokoro/macos/node_12_x64.cfg new file mode 100644 index 00000000..a4d7c8d0 --- /dev/null +++ b/tools/release/kokoro/macos/node_12_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "12.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_13_ia32.cfg b/tools/release/kokoro/macos/node_13_ia32.cfg new file mode 100644 index 00000000..7fe3a4ea --- /dev/null +++ b/tools/release/kokoro/macos/node_13_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "13.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_13_x64.cfg b/tools/release/kokoro/macos/node_13_x64.cfg new file mode 100644 index 00000000..156eb6cf --- /dev/null +++ b/tools/release/kokoro/macos/node_13_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "13.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_4_ia32.cfg b/tools/release/kokoro/macos/node_4_ia32.cfg new file mode 100644 index 00000000..1411ea92 --- /dev/null +++ b/tools/release/kokoro/macos/node_4_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "4.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_4_x64.cfg b/tools/release/kokoro/macos/node_4_x64.cfg new file mode 100644 index 00000000..8a330ce5 --- /dev/null +++ b/tools/release/kokoro/macos/node_4_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "4.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_5_ia32.cfg b/tools/release/kokoro/macos/node_5_ia32.cfg new file mode 100644 index 00000000..f99f3b69 --- /dev/null +++ b/tools/release/kokoro/macos/node_5_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "5.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_5_x64.cfg b/tools/release/kokoro/macos/node_5_x64.cfg new file mode 100644 index 00000000..f1436c2f --- /dev/null +++ b/tools/release/kokoro/macos/node_5_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "5.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_6_ia32.cfg b/tools/release/kokoro/macos/node_6_ia32.cfg new file mode 100644 index 00000000..2381480d --- /dev/null +++ b/tools/release/kokoro/macos/node_6_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "6.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_6_x64.cfg b/tools/release/kokoro/macos/node_6_x64.cfg new file mode 100644 index 00000000..10b657ee --- /dev/null +++ b/tools/release/kokoro/macos/node_6_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "6.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_7_ia32.cfg b/tools/release/kokoro/macos/node_7_ia32.cfg new file mode 100644 index 00000000..9841a4a2 --- /dev/null +++ b/tools/release/kokoro/macos/node_7_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "7.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_7_x64.cfg b/tools/release/kokoro/macos/node_7_x64.cfg new file mode 100644 index 00000000..a46516bb --- /dev/null +++ b/tools/release/kokoro/macos/node_7_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "7.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_8_ia32.cfg b/tools/release/kokoro/macos/node_8_ia32.cfg new file mode 100644 index 00000000..4c6f268c --- /dev/null +++ b/tools/release/kokoro/macos/node_8_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "8.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_8_x64.cfg b/tools/release/kokoro/macos/node_8_x64.cfg new file mode 100644 index 00000000..2034ac8d --- /dev/null +++ b/tools/release/kokoro/macos/node_8_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "8.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_9_ia32.cfg b/tools/release/kokoro/macos/node_9_ia32.cfg new file mode 100644 index 00000000..f51cf728 --- /dev/null +++ b/tools/release/kokoro/macos/node_9_ia32.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "ia32" +} +env_vars { + key: "VERSION" + value: "9.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +} diff --git a/tools/release/kokoro/macos/node_9_x64.cfg b/tools/release/kokoro/macos/node_9_x64.cfg new file mode 100644 index 00000000..083e1ee8 --- /dev/null +++ b/tools/release/kokoro/macos/node_9_x64.cfg @@ -0,0 +1,35 @@ +# Copyright 2020 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +build_file: "grpc-node/packages/grpc-native-core/tools/run_tests/artifacts/build_one_artifact_macos.sh" +env_vars { + key: "RUNTIME" + value: "node" +} +env_vars { + key: "ARCH" + value: "x64" +} +env_vars { + key: "VERSION" + value: "9.0.0" +} +action { + define_artifacts { + regex: "github/grpc-node/artifacts/**", + strip_prefix: "github/grpc-node/artifacts" + } +}