From 6a0c656e3b99361ada25cbc40f58cba90cd0bef5 Mon Sep 17 00:00:00 2001 From: Alejandro Cotroneo Date: Fri, 29 Sep 2023 16:37:35 -0300 Subject: [PATCH 1/3] feat(azure): Add ContainerApp services --- package.json | 1 + src/enums/serviceMap.ts | 4 + src/enums/services.ts | 2 + src/properties/logger.ts | 3 + src/services/containerApp/data.ts | 76 ++++++++ src/services/containerApp/format.ts | 47 +++++ src/services/containerApp/index.ts | 13 ++ src/services/containerApp/mutation.ts | 5 + src/services/containerApp/schema.graphql | 16 ++ src/services/containerAppEnvironment/data.ts | 179 ++++++++++++++++++ .../containerAppEnvironment/format.ts | 64 +++++++ src/services/containerAppEnvironment/index.ts | 16 ++ .../containerAppEnvironment/mutation.ts | 5 + .../containerAppEnvironment/schema.graphql | 58 ++++++ src/types/generated.ts | 48 +++++ yarn.lock | 44 +++++ 16 files changed, 581 insertions(+) create mode 100644 src/services/containerApp/data.ts create mode 100644 src/services/containerApp/format.ts create mode 100644 src/services/containerApp/index.ts create mode 100644 src/services/containerApp/mutation.ts create mode 100644 src/services/containerApp/schema.graphql create mode 100644 src/services/containerAppEnvironment/data.ts create mode 100644 src/services/containerAppEnvironment/format.ts create mode 100644 src/services/containerAppEnvironment/index.ts create mode 100644 src/services/containerAppEnvironment/mutation.ts create mode 100644 src/services/containerAppEnvironment/schema.graphql diff --git a/package.json b/package.json index cd720bf..2b77a51 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "terraform:cleanup": "rimraf ./tests/terraform/{.terraform,.terraform.lock.hcl,tfplan} ./tests/terraform/*.{tfstate,tfplan,backup}" }, "dependencies": { + "@azure/arm-appcontainers": "^2.0.0", "@azure/arm-appinsights": "^4.0.0", "@azure/arm-appservice": "^11.0.0", "@azure/arm-authorization": "^8.4.1", diff --git a/src/enums/serviceMap.ts b/src/enums/serviceMap.ts index d6795b1..eb80618 100644 --- a/src/enums/serviceMap.ts +++ b/src/enums/serviceMap.ts @@ -24,6 +24,8 @@ import AzureCdnOrigins from '../services/cdnOrigins' import AzureCdnProfiles from '../services/cdnProfiles' import AzureCognitiveServicesAccount from '../services/cognitiveServicesAccount' import AzureContainerRegistry from '../services/containerRegistry' +import AzureContainerApp from '../services/containerApp' +import AzureContainerAppEnvironment from '../services/containerAppEnvironment' import AzureDataCollectionRule from '../services/dataCollectionRule' import AzureDataFactory from '../services/dataFactory' import AzureDatabaseManagedSqlInstance from '../services/databaseManagedSqlInstance' @@ -131,6 +133,8 @@ export default { [services.cdnProfiles]: AzureCdnProfiles, [services.cognitiveServicesAccount]: AzureCognitiveServicesAccount, [services.containerRegistry]: AzureContainerRegistry, + [services.containerApp]: AzureContainerApp, + [services.containerAppEnvironment]: AzureContainerAppEnvironment, [services.cosmosDb]: AzureCosmosDb, [services.dataCollectionRule]: AzureDataCollectionRule, [services.dataFactory]: AzureDataFactory, diff --git a/src/enums/services.ts b/src/enums/services.ts index b9da488..d6c2e34 100644 --- a/src/enums/services.ts +++ b/src/enums/services.ts @@ -29,6 +29,8 @@ export default { cdnProfiles: 'cdnProfiles', cognitiveServicesAccount: 'cognitiveServicesAccount', containerRegistry: 'containerRegistry', + containerApp: 'containerApp', + containerAppEnvironment: 'containerAppEnvironment', cosmosDb: 'cosmosDb', dataCollectionRule: 'dataCollectionRule', dataFactory: 'dataFactory', diff --git a/src/properties/logger.ts b/src/properties/logger.ts index 241c469..84784c8 100644 --- a/src/properties/logger.ts +++ b/src/properties/logger.ts @@ -70,6 +70,9 @@ export default { `Found ${num} CDN origin groups`, foundContainerRegistries: (num: number): string => `Found ${num} container registries`, + foundContainerApps: (num: number): string => `Found ${num} container apps`, + foundContainerAppEnvironment: (num: number): string => + `Found ${num} container environments`, /* Cosmos DB */ foundCosmosDbAccounts: (num: number): string => `Found ${num} cosmos DB accounts`, diff --git a/src/services/containerApp/data.ts b/src/services/containerApp/data.ts new file mode 100644 index 0000000..f2a7eba --- /dev/null +++ b/src/services/containerApp/data.ts @@ -0,0 +1,76 @@ +import { ContainerApp, ContainerAppsAPIClient } from '@azure/arm-appcontainers' + +import CloudGraph from '@cloudgraph/sdk' + +import azureLoggerText from '../../properties/logger' +import { AzureServiceInput, TagMap } from '../../types' +import { tryCatchWrapper } from '../../utils/index' +import { regionMap } from '../../enums/regions' + +const { logger } = CloudGraph +const lt = { ...azureLoggerText } +const serviceName = 'ContainerApp' + +export interface RawAzureContainerApp + extends Omit { + resourceGroupId?: string + region: string + customDomainVerificationId?: string + environmentId?: string + latestReadyRevisionName?: string + latestRevisionFqdn?: string + latestRevisionName?: string + location?: string + managedEnvironmentId?: string + provisioningState?: string + workloadProfileName?: string + Tags: TagMap +} + +export default async ({ + config, +}: AzureServiceInput): Promise<{ + [property: string]: RawAzureContainerApp[] +}> => { + try { + const { tokenCredentials, subscriptionId } = config + const client = new ContainerAppsAPIClient(tokenCredentials, subscriptionId) + + const containerApps: RawAzureContainerApp[] = [] + const result = { global: [] } + await tryCatchWrapper( + async () => { + for await (const containerApp of client.containerApps.listBySubscription()) { + if (containerApp) { + const { tags, ...rest } = containerApp + + containerApps.push({ + ...rest, + id: rest.id.replace('/containerapps/', '/containerApps/'), // fix casing in Id + region: containerApp.location || regionMap.global, + Tags: tags || {}, + }) + } + } + }, + { + service: serviceName, + client, + scope: 'containerApps', + operation: 'listBySubscription', + } + ) + logger.debug(lt.foundContainerApps(containerApps.length)) + + containerApps.map(({ region, ...rest }) => { + result.global.push({ + ...rest, + region, + }) + }) + return result + } catch (e) { + logger.error(e) + return {} + } +} diff --git a/src/services/containerApp/format.ts b/src/services/containerApp/format.ts new file mode 100644 index 0000000..6b9bcdc --- /dev/null +++ b/src/services/containerApp/format.ts @@ -0,0 +1,47 @@ +import { RawAzureContainerApp } from './data' +import { formatTagsFromMap } from '../../utils/format' +import { AzureContainerApp } from '../../types/generated' + +export default ({ + service, + account: subscriptionId, +}: { + service: RawAzureContainerApp + account: string +}): AzureContainerApp => { + const { + id, + name, + type, + region, + resourceGroupId, + customDomainVerificationId, + environmentId, + latestReadyRevisionName, + latestRevisionFqdn, + latestRevisionName, + location, + managedEnvironmentId, + provisioningState, + workloadProfileName, + Tags = {}, + } = service + return { + id, + name, + type, + region, + resourceGroupId, + customDomainVerificationId, + environmentId, + latestReadyRevisionName, + latestRevisionFqdn, + latestRevisionName, + location, + managedEnvironmentId, + provisioningState, + workloadProfileName, + subscriptionId, + tags: formatTagsFromMap(Tags), + } +} diff --git a/src/services/containerApp/index.ts b/src/services/containerApp/index.ts new file mode 100644 index 0000000..10a5ebf --- /dev/null +++ b/src/services/containerApp/index.ts @@ -0,0 +1,13 @@ +import { Service } from '@cloudgraph/sdk' +import BaseService from '../base' +import format from './format' +import mutation from './mutation' +import getData from './data' + +export default class AzureContainerApp extends BaseService implements Service { + format = format.bind(this) + + getData = getData.bind(this) + + mutation = mutation +} diff --git a/src/services/containerApp/mutation.ts b/src/services/containerApp/mutation.ts new file mode 100644 index 0000000..a7da5c0 --- /dev/null +++ b/src/services/containerApp/mutation.ts @@ -0,0 +1,5 @@ +export default `mutation($input: [AddazureContainerAppInput!]!) { + addazureContainerApp(input: $input, upsert: true) { + numUids + } +}` diff --git a/src/services/containerApp/schema.graphql b/src/services/containerApp/schema.graphql new file mode 100644 index 0000000..98a3a0d --- /dev/null +++ b/src/services/containerApp/schema.graphql @@ -0,0 +1,16 @@ +type azureContainerApp implements azureResource + @generate( + query: { get: true, query: true, aggregate: true } + mutation: { add: true, delete: false } + ) + @key(fields: "id") { + location: String @search(by: [hash, regexp]) + provisioningState: String @search(by: [hash, regexp]) + managedEnvironmentId: String @search(by: [hash, regexp]) + environmentId: String @search(by: [hash, regexp]) + workloadProfileName: String @search(by: [hash, regexp]) + latestRevisionName: String @search(by: [hash, regexp]) + latestReadyRevisionName: String @search(by: [hash, regexp]) + latestRevisionFqdn: String @search(by: [hash, regexp]) + customDomainVerificationId: String @search(by: [hash, regexp]) +} diff --git a/src/services/containerAppEnvironment/data.ts b/src/services/containerAppEnvironment/data.ts new file mode 100644 index 0000000..da1aeb2 --- /dev/null +++ b/src/services/containerAppEnvironment/data.ts @@ -0,0 +1,179 @@ +import { + ContainerAppsAPIClient, + ManagedEnvironment, + Certificate, + DaprComponent, + ManagedEnvironmentStorage, +} from '@azure/arm-appcontainers' + +import CloudGraph from '@cloudgraph/sdk' +import azureLoggerText from '../../properties/logger' +import { AzureServiceInput, TagMap } from '../../types' +import { tryCatchWrapper } from '../../utils/index' +import { regionMap } from '../../enums/regions' + +const { logger } = CloudGraph +const lt = { ...azureLoggerText } +const serviceName = 'ContainerAppEnvironment' + +export interface RawAzureAppEnvironment + extends Omit { + resourceGroupId?: string + certificates: Certificate[] + daprComponents: DaprComponent[] + storages: ManagedEnvironmentStorage[] + region: string + defaultDomain?: string + eventStreamEndpoint?: string + infrastructureResourceGroup?: string + provisioningState?: string + staticIp?: string + subscriptionId?: string + zoneRedundant?: boolean + Tags: TagMap +} + +async function getDaprComponents( + client: ContainerAppsAPIClient, + resourceGroupName: string, + resource: ManagedEnvironment +): Promise { + const daprComponents = [] as DaprComponent[] + await tryCatchWrapper( + async () => { + for await (const daprComponent of client.daprComponents.list( + resourceGroupName, + resource.name + )) { + daprComponents.push(daprComponent) + } + }, + { + service: serviceName, + client, + scope: 'daprComponents', + operation: 'list', + } + ) + return daprComponents +} + +async function getCertificates( + client: ContainerAppsAPIClient, + resourceGroupName: string, + resource: ManagedEnvironment +): Promise { + const certificates = [] as Certificate[] + await tryCatchWrapper( + async () => { + for await (const certificate of client.certificates.list( + resourceGroupName, + resource.name + )) { + certificates.push(certificate) + } + }, + { + service: serviceName, + client, + scope: 'certificates', + operation: 'list', + } + ) + return certificates +} + +async function getStorages( + client: ContainerAppsAPIClient, + resourceGroupName: string, + resource: ManagedEnvironment +): Promise { + const storages = [] as ManagedEnvironmentStorage[] + await tryCatchWrapper( + async () => { + const storagesCollection = await client.managedEnvironmentsStorages.list( + resourceGroupName, + resource.name + ) + for (const storage of storagesCollection.value) { + storages.push(storage) + } + }, + { + service: serviceName, + client, + scope: 'managedEnvironmentsStorages', + operation: 'list', + } + ) + return storages +} + +export default async ({ + config, +}: AzureServiceInput): Promise<{ + [property: string]: RawAzureAppEnvironment[] +}> => { + try { + const { tokenCredentials, subscriptionId } = config + const client = new ContainerAppsAPIClient(tokenCredentials, subscriptionId) + const resources: RawAzureAppEnvironment[] = [] + const result = { global: [] } + await tryCatchWrapper( + async () => { + for await (const resource of client.managedEnvironments.listBySubscription()) { + if (resource) { + const { tags, ...rest } = resource + + // "/subscriptions/xxx/resourceGroups/yyy/providers/Microsoft.App/containerApps/YYY" + const [, , , , resourceGroupName] = resource.id.split('/') + const certificates = await getCertificates( + client, + resourceGroupName, + resource + ) + + const daprComponents = await getDaprComponents( + client, + resourceGroupName, + resource + ) + + const storages = await getStorages( + client, + resourceGroupName, + resource + ) + + resources.push({ + ...rest, + region: resource.location || regionMap.global, + certificates, + daprComponents, + storages, + Tags: tags || {}, + }) + } + } + }, + { + service: serviceName, + client, + scope: 'managedEnvironments', + operation: 'listBySubscription', + } + ) + logger.debug(lt.foundContainerAppEnvironment(resources.length)) + + resources.map(({ region, ...rest }) => { + result.global.push({ + ...rest, + region, + }) + }) + return result + } catch (e) { + logger.error(e) + return {} + } +} diff --git a/src/services/containerAppEnvironment/format.ts b/src/services/containerAppEnvironment/format.ts new file mode 100644 index 0000000..b638c2c --- /dev/null +++ b/src/services/containerAppEnvironment/format.ts @@ -0,0 +1,64 @@ +import { RawAzureAppEnvironment } from './data' +import { formatTagsFromMap } from '../../utils/format' +import { AzureContainerAppEnvironment } from '../../types/generated' + +export default ({ + service, + account: subscriptionId, +}: { + service: RawAzureAppEnvironment + account: string +}): AzureContainerAppEnvironment => { + const { + id, + name, + type, + region, + resourceGroupId, + certificates = [], + daprComponents = [], + storages = [], + defaultDomain, + eventStreamEndpoint, + infrastructureResourceGroup, + provisioningState, + staticIp, + zoneRedundant, + Tags: TagMap, + } = service + return { + id, + subscriptionId, + name, + type, + region, + resourceGroupId, + certificates: certificates.map(c => ({ + id: c.id, + name: c.name, + type: c.type, + location: c.location, + })), + daprComponents: daprComponents.map(d => ({ + id: d.id, + name: d.name, + type: d.type, + componentType: d.componentType, + ignoreErrors: d.ignoreErrors, + secretStoreComponent: d.secretStoreComponent, + version: d.version, + })), + storages: storages.map(s => ({ + id: s.id, + name: s.name, + type: s.type, + })), + defaultDomain, + eventStreamEndpoint, + infrastructureResourceGroup, + provisioningState, + staticIp, + zoneRedundant, + tags: formatTagsFromMap(TagMap), + } +} diff --git a/src/services/containerAppEnvironment/index.ts b/src/services/containerAppEnvironment/index.ts new file mode 100644 index 0000000..4a3ec27 --- /dev/null +++ b/src/services/containerAppEnvironment/index.ts @@ -0,0 +1,16 @@ +import { Service } from '@cloudgraph/sdk' +import BaseService from '../base' +import format from './format' +import mutation from './mutation' +import getData from './data' + +export default class AzureContainerAppEnvironment + extends BaseService + implements Service +{ + format = format.bind(this) + + getData = getData.bind(this) + + mutation = mutation +} diff --git a/src/services/containerAppEnvironment/mutation.ts b/src/services/containerAppEnvironment/mutation.ts new file mode 100644 index 0000000..1396a88 --- /dev/null +++ b/src/services/containerAppEnvironment/mutation.ts @@ -0,0 +1,5 @@ +export default `mutation($input: [AddazureContainerAppsInput!]!) { + addazureContainerApps(input: $input, upsert: true) { + numUids + } +}` diff --git a/src/services/containerAppEnvironment/schema.graphql b/src/services/containerAppEnvironment/schema.graphql new file mode 100644 index 0000000..1017a1c --- /dev/null +++ b/src/services/containerAppEnvironment/schema.graphql @@ -0,0 +1,58 @@ + +type azureContainerAppEnvironmentCertificate + @generate( + query: { get: false, query: true, aggregate: false } + mutation: { add: false, delete: false } + subscription: false + ) + @key(fields: "id") { + id: String! @id @search(by: [hash, regexp]) + id: String! @id @search(by: [hash, regexp]) + name: String @search(by: [hash, regexp]) + type: String @search(by: [hash, regexp]) + location: String @search(by: [hash, regexp]) +} +type azureContainerAppEnvironmentDaprComponent + @generate( + query: { get: false, query: true, aggregate: false } + mutation: { add: false, delete: false } + subscription: false + ) + @key(fields: "id") { + id: String! @id @search(by: [hash, regexp]) + name: String @search(by: [hash, regexp]) + type: String @search(by: [hash, regexp]) + componentType: String @search(by: [hash, regexp]) + version: String + ignoreErrors: Boolean + secretStoreComponent: String +} +type azureContainerAppEnvironmentStorage + @generate( + query: { get: false, query: true, aggregate: false } + mutation: { add: false, delete: false } + subscription: false + ) + @key(fields: "id") { + id: String! @id @search(by: [hash, regexp]) + name: String @search(by: [hash, regexp]) + type: String @search(by: [hash, regexp]) +} + +type azureContainerAppEnvironment implements azureResource + @generate( + query: { get: true, query: true, aggregate: true } + mutation: { add: true, delete: false } + ) + @key(fields: "id") { + provisioningState: String @search(by: [hash, regexp]) + defaultDomain: String @search(by: [hash, regexp]) + staticIp: String @search(by: [hash, regexp]) + infrastructureResourceGroup: String @search(by: [hash, regexp]) + zoneRedundant: Boolean @search + eventStreamEndpoint: String @search(by: [hash, regexp]) + subscriptionId: String @search(by: [hash, regexp]) + certificates: [azureContainerAppEnvironmentCertificate] + daprComponents: [azureContainerAppEnvironmentDaprComponent] + storages: [azureContainerAppEnvironmentStorage] +} diff --git a/src/types/generated.ts b/src/types/generated.ts index a2483f2..a9ac462 100644 --- a/src/types/generated.ts +++ b/src/types/generated.ts @@ -2391,6 +2391,54 @@ export type AzureCognitiveServicesAccountVirtualNetworkRules = { state?: Maybe; }; +export type AzureContainerApp = AzureResource & { + customDomainVerificationId?: Maybe; + environmentId?: Maybe; + latestReadyRevisionName?: Maybe; + latestRevisionFqdn?: Maybe; + latestRevisionName?: Maybe; + location?: Maybe; + managedEnvironmentId?: Maybe; + provisioningState?: Maybe; + workloadProfileName?: Maybe; +}; + +export type AzureContainerAppEnvironment = AzureResource & { + certificates?: Maybe>>; + daprComponents?: Maybe>>; + defaultDomain?: Maybe; + eventStreamEndpoint?: Maybe; + infrastructureResourceGroup?: Maybe; + provisioningState?: Maybe; + staticIp?: Maybe; + storages?: Maybe>>; + subscriptionId?: Maybe; + zoneRedundant?: Maybe; +}; + +export type AzureContainerAppEnvironmentCertificate = { + id: Scalars['String']; + location?: Maybe; + name?: Maybe; + type?: Maybe; +}; + +export type AzureContainerAppEnvironmentDaprComponent = { + componentType?: Maybe; + id: Scalars['String']; + ignoreErrors?: Maybe; + name?: Maybe; + secretStoreComponent?: Maybe; + type?: Maybe; + version?: Maybe; +}; + +export type AzureContainerAppEnvironmentStorage = { + id: Scalars['String']; + name?: Maybe; + type?: Maybe; +}; + export type AzureContainerRegistry = AzureResource & { adminUserEnabled?: Maybe; creationDate?: Maybe; diff --git a/yarn.lock b/yarn.lock index 14d849c..847b8a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -60,6 +60,19 @@ dependencies: tslib "^2.2.0" +"@azure/arm-appcontainers@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@azure/arm-appcontainers/-/arm-appcontainers-2.0.0.tgz#eac600011e49a4d1326a8abfa3c62384e762fb7a" + integrity sha512-o7ICeuEiovGht8CsO/xECP4C1P8LNeCYzhcYAhx1nr/AQWrF9mTPFT/sZV8W/rFDkjJSMq9JbDm/riSRRGt6rA== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-client" "^1.7.0" + "@azure/core-lro" "^2.5.3" + "@azure/core-paging" "^1.2.0" + "@azure/core-rest-pipeline" "^1.8.0" + tslib "^2.2.0" + "@azure/arm-appinsights@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@azure/arm-appinsights/-/arm-appinsights-4.0.0.tgz#f59f561c966655af1ffdb488bfab6678f21fbb9a" @@ -556,6 +569,19 @@ "@azure/logger" "^1.0.0" tslib "^2.2.0" +"@azure/core-client@^1.7.0": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.7.3.tgz#f8cb2a1f91e8bc4921fa2e745cfdfda3e6e491a3" + integrity sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "^1.9.1" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.0.0" + "@azure/logger" "^1.0.0" + tslib "^2.2.0" + "@azure/core-http@^2.0.0", "@azure/core-http@^2.2.4": version "2.3.1" resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-2.3.1.tgz#eed8a7d012ba8c576c557828f66af0fc4e52b23a" @@ -586,6 +612,16 @@ "@azure/logger" "^1.0.0" tslib "^2.2.0" +"@azure/core-lro@^2.5.3": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.5.4.tgz#b21e2bcb8bd9a8a652ff85b61adeea51a8055f90" + integrity sha512-3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-util" "^1.2.0" + "@azure/logger" "^1.0.0" + tslib "^2.2.0" + "@azure/core-paging@^1.1.1", "@azure/core-paging@^1.2.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.4.0.tgz#b04a73ad18149733a848c3089a5e5ed144592338" @@ -632,6 +668,14 @@ "@azure/abort-controller" "^1.0.0" tslib "^2.2.0" +"@azure/core-util@^1.2.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.5.0.tgz#ffe49c3e867044da67daeb8122143fa065e1eb0e" + integrity sha512-GZBpVFDtQ/15hW1OgBcRdT4Bl7AEpcEZqLfbAvOtm1CQUncKWiYapFHVD588hmlV27NbOOtSm3cnLF3lvoHi4g== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + "@azure/identity@^2.0.4": version "2.1.0" resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-2.1.0.tgz#89f0bfc1d1264dfd3d0cb19837c33a9c6706d548" From 78e47c75394f524ac5a630531f318193c0f40578 Mon Sep 17 00:00:00 2001 From: autocloud-deploy-bot Date: Mon, 2 Oct 2023 17:10:51 +0000 Subject: [PATCH 2/3] chore(release): 0.68.0-alpha.1 # [0.68.0-alpha.1](https://github.com/cloudgraphdev/cloudgraph-provider-azure/compare/0.67.0...0.68.0-alpha.1) (2023-10-02) ### Features * **azure:** Add ContainerApp services ([6a0c656](https://github.com/cloudgraphdev/cloudgraph-provider-azure/commit/6a0c656e3b99361ada25cbc40f58cba90cd0bef5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 253a295..69c95fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.68.0-alpha.1](https://github.com/cloudgraphdev/cloudgraph-provider-azure/compare/0.67.0...0.68.0-alpha.1) (2023-10-02) + + +### Features + +* **azure:** Add ContainerApp services ([6a0c656](https://github.com/cloudgraphdev/cloudgraph-provider-azure/commit/6a0c656e3b99361ada25cbc40f58cba90cd0bef5)) + # [0.67.0](https://github.com/cloudgraphdev/cloudgraph-provider-azure/compare/0.66.0...0.67.0) (2023-07-19) diff --git a/package.json b/package.json index 2b77a51..77944a7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudgraph/cg-provider-azure", - "version": "0.67.0", + "version": "0.68.0-alpha.1", "description": "CloudGraph provider plugin for Azure used to fetch Azure cloud data.", "publishConfig": { "registry": "https://registry.npmjs.org/", From 157274717cf0cdf44ade3154ba036b37790f85ca Mon Sep 17 00:00:00 2001 From: autocloud-deploy-bot Date: Mon, 2 Oct 2023 17:14:15 +0000 Subject: [PATCH 3/3] chore(release): 0.68.0-beta.1 # [0.68.0-beta.1](https://github.com/cloudgraphdev/cloudgraph-provider-azure/compare/0.67.0...0.68.0-beta.1) (2023-10-02) ### Features * **azure:** Add ContainerApp services ([6a0c656](https://github.com/cloudgraphdev/cloudgraph-provider-azure/commit/6a0c656e3b99361ada25cbc40f58cba90cd0bef5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69c95fa..6c15fa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.68.0-beta.1](https://github.com/cloudgraphdev/cloudgraph-provider-azure/compare/0.67.0...0.68.0-beta.1) (2023-10-02) + + +### Features + +* **azure:** Add ContainerApp services ([6a0c656](https://github.com/cloudgraphdev/cloudgraph-provider-azure/commit/6a0c656e3b99361ada25cbc40f58cba90cd0bef5)) + # [0.68.0-alpha.1](https://github.com/cloudgraphdev/cloudgraph-provider-azure/compare/0.67.0...0.68.0-alpha.1) (2023-10-02) diff --git a/package.json b/package.json index 77944a7..38bc469 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudgraph/cg-provider-azure", - "version": "0.68.0-alpha.1", + "version": "0.68.0-beta.1", "description": "CloudGraph provider plugin for Azure used to fetch Azure cloud data.", "publishConfig": { "registry": "https://registry.npmjs.org/",