diff --git a/cli/package-lock.json b/cli/package-lock.json index ce59dc3118..0d4dd16eb7 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -29,7 +29,7 @@ }, "devDependencies": { "@types/mime": "^2.0.3", - "@types/node": "^17.0.31" + "@types/node": "^17.0.45" } }, "node_modules/@aws-crypto/crc32": { @@ -1763,9 +1763,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "engines": { "node": ">= 14" } diff --git a/cli/package.json b/cli/package.json index 082d3a6f5d..0919913e3f 100644 --- a/cli/package.json +++ b/cli/package.json @@ -27,7 +27,7 @@ }, "devDependencies": { "@types/mime": "^2.0.3", - "@types/node": "^17.0.31" + "@types/node": "^17.0.45" }, "dependencies": { "@aws-sdk/client-s3": "^3.45.0", diff --git a/cli/src/action/deploy/index.ts b/cli/src/action/deploy/index.ts index 300d5a3900..3b16c6f5ff 100644 --- a/cli/src/action/deploy/index.ts +++ b/cli/src/action/deploy/index.ts @@ -3,9 +3,11 @@ import { AppSchema } from '../../schema/app' import { DeploySchema } from '../../schema/deploy' import { pushAll as pushAllFunctions } from '../function' import { create as createBucket, push as pushBucket } from '../storage' +import { create as createWebsite } from '../website' import { push as pushDependency } from '../dependency' import { pullAll as pullAllPolicies } from '../policy' import { getEmoji } from '../../util/print' +import { websiteControllerFindAll } from '../../api/v1/websitehosting' export async function deploy() { if (!DeploySchema.exist()) { @@ -37,7 +39,23 @@ export async function deploy() { if (!bucketMap.has(bucket.name)) { await createBucket(bucket.name, { policy: bucket.policy }) } else { - console.log(`${bucket.name} already exist, skip`) + console.log(`bucket ${bucket.name} already exist, skip`) + } + } + } + + if (deploySchema?.resources?.websites) { + const websites = await websiteControllerFindAll(appSchema.appid) + const websiteMap = new Map() + websites.forEach((website) => { + websiteMap.set(website.bucketName, true) + }) + + for (let website of deploySchema?.resources?.websites) { + if (!websiteMap.has(website.bucketName) && !websiteMap.has(appSchema.appid + '-' + website.bucketName)) { + await createWebsite(website.bucketName, {}) + } else { + console.log(`website:${website.bucketName} already exist, skip`) } } } @@ -48,5 +66,6 @@ export async function deploy() { await pushBucket(bucket.bucketName, bucket.srcDir, { force: true, detail: false }) } } + console.log(`${getEmoji('🚀')} deploy success`) } diff --git a/cli/src/schema/deploy.ts b/cli/src/schema/deploy.ts index 117a4b4c6c..ed57bc802f 100644 --- a/cli/src/schema/deploy.ts +++ b/cli/src/schema/deploy.ts @@ -1,13 +1,14 @@ import { DEPLOY_SCHEMA_NAME } from '../common/constant' import { exist, loadYamlFile } from '../util/file' import { getAppPath } from '../util/sys' -import path = require('path') +import * as path from 'node:path' export class DeploySchema { name: string resources?: { buckets?: BucketResource[] + websites?: WebsiteResource[] } actions?: { @@ -30,6 +31,11 @@ export class BucketResource { policy: 'private' | 'readonly' | 'readwrite' } +export class WebsiteResource { + name: string + bucketName: string +} + export class BucketAction { name: string bucketName: string