Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,14 @@ inputs:
restart:
description: 'Restart the app service after deployment'
required: false

sitecontainers-config:
description: 'Applies to Sitecontainers, containes a list of siteContainer specs'
required: false
blessed-app-sitecontainers:
description: 'Applies to blessed apps with Sitecontainers'
required: false
default: 'false'

outputs:
webapp-url:
description: 'URL to work with your webapp'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class PublishProfileContainerWebAppValidator {
(0, Validations_1.packageNotAllowed)(actionParams.packageInput);
(0, Validations_1.multiContainerNotAllowed)(actionParams.multiContainerConfigFile);
(0, Validations_1.startupCommandNotAllowed)(actionParams.startupCommand);
(0, Validations_1.siteContainersConfigNotAllowed)(actionParams.siteContainers);
(0, Validations_1.validateAppDetails)();
(0, Validations_1.validateSingleContainerInputs)();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class PublishProfileWebAppValidator {
(0, Validations_1.containerInputsNotAllowed)(actionParams.images, actionParams.multiContainerConfigFile, true);
(0, Validations_1.validateAppDetails)();
(0, Validations_1.startupCommandNotAllowed)(actionParams.startupCommand);
(0, Validations_1.siteContainersConfigNotAllowed)(actionParams.siteContainers);
yield (0, Validations_1.validatePackageInput)();
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SpnWebAppSiteContainersValidator = void 0;
const Validations_1 = require("../Validations");
const actionparameters_1 = require("../../actionparameters");
class SpnWebAppSiteContainersValidator {
validate() {
return __awaiter(this, void 0, void 0, function* () {
const actionParams = actionparameters_1.ActionParameters.getActionParams();
//packageNotAllowed(actionParams.packageInput);
(0, Validations_1.validateSiteContainersInputs)();
});
}
}
exports.SpnWebAppSiteContainersValidator = SpnWebAppSiteContainersValidator;
15 changes: 15 additions & 0 deletions lib/ActionInputValidator/Validations.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ exports.multiContainerNotAllowed = multiContainerNotAllowed;
exports.validateSingleContainerInputs = validateSingleContainerInputs;
exports.validateContainerInputs = validateContainerInputs;
exports.validatePackageInput = validatePackageInput;
exports.siteContainersConfigNotAllowed = siteContainersConfigNotAllowed;
exports.validateSiteContainersInputs = validateSiteContainersInputs;
const core = __importStar(require("@actions/core"));
const packageUtility_1 = require("azure-actions-utility/packageUtility");
const PublishProfile_1 = require("../Utilities/PublishProfile");
Expand Down Expand Up @@ -136,3 +138,16 @@ function validatePackageInput() {
}
});
}
// Error if Sitecontainers configuration is provided
function siteContainersConfigNotAllowed(siteContainers) {
if (!!siteContainers) {
throw new Error("SiteContainers not valid input for this web app.");
}
}
// validate Sitecontainers inputs
function validateSiteContainersInputs() {
const actionParams = actionparameters_1.ActionParameters.getActionParams();
if (!actionParams.siteContainers || actionParams.siteContainers.length === 0) {
throw new Error("Site containers not provided.");
}
}
52 changes: 44 additions & 8 deletions lib/ActionInputValidator/ValidatorFactory.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,27 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
Expand All @@ -14,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValidatorFactory = void 0;
const actionparameters_1 = require("../actionparameters");
const core = __importStar(require("@actions/core"));
const AzureResourceFilterUtility_1 = require("azure-actions-appservice-rest/Utilities/AzureResourceFilterUtility");
const BaseWebAppDeploymentProvider_1 = require("../DeploymentProvider/Providers/BaseWebAppDeploymentProvider");
const PublishProfileWebAppValidator_1 = require("./ActionValidators/PublishProfileWebAppValidator");
Expand All @@ -25,37 +49,49 @@ const SpnWindowsWebAppValidator_1 = require("./ActionValidators/SpnWindowsWebApp
const Validations_1 = require("./Validations");
const PublishProfile_1 = require("../Utilities/PublishProfile");
const RuntimeConstants_1 = __importDefault(require("../RuntimeConstants"));
const SpnWebAppSiteContainersValidator_1 = require("./ActionValidators/SpnWebAppSiteContainersValidator");
class ValidatorFactory {
static getValidator(type) {
return __awaiter(this, void 0, void 0, function* () {
let actionParams = actionparameters_1.ActionParameters.getActionParams();
if (type === BaseWebAppDeploymentProvider_1.DEPLOYMENT_PROVIDER_TYPES.PUBLISHPROFILE) {
if (!!actionParams.images) {
if (!!actionParams.blessedAppSitecontainers || !!actionParams.siteContainers) {
throw new Error("publish-profile is not supported for Site Containers scenario");
}
else if (!!actionParams.images) {
yield this.setResourceDetails(actionParams);
return new PublishProfileContainerWebAppValidator_1.PublishProfileContainerWebAppValidator();
return [new PublishProfileContainerWebAppValidator_1.PublishProfileContainerWebAppValidator()];
}
else {
return new PublishProfileWebAppValidator_1.PublishProfileWebAppValidator();
return [new PublishProfileWebAppValidator_1.PublishProfileWebAppValidator()];
}
}
else if (type == BaseWebAppDeploymentProvider_1.DEPLOYMENT_PROVIDER_TYPES.SPN) {
// app-name is required to get resource details
(0, Validations_1.appNameIsRequired)(actionParams.appName);
yield this.getResourceDetails(actionParams);
if (!!actionParams.isLinux) {
if (!!actionParams.images || !!actionParams.multiContainerConfigFile) {
return new SpnLinuxContainerWebAppValidator_1.SpnLinuxContainerWebAppValidator();
if (!!actionParams.blessedAppSitecontainers) {
core.info("Validating site containers app details");
return [new SpnWebAppSiteContainersValidator_1.SpnWebAppSiteContainersValidator(), new SpnLinuxWebAppValidator_1.SpnLinuxWebAppValidator()];
}
else if (!!actionParams.siteContainers) {
core.info("Validating site containers app details");
return [new SpnWebAppSiteContainersValidator_1.SpnWebAppSiteContainersValidator()];
}
else if (!!actionParams.images || !!actionParams.multiContainerConfigFile) {
return [new SpnLinuxContainerWebAppValidator_1.SpnLinuxContainerWebAppValidator()];
}
else {
return new SpnLinuxWebAppValidator_1.SpnLinuxWebAppValidator();
return [new SpnLinuxWebAppValidator_1.SpnLinuxWebAppValidator()];
}
}
else {
if (!!actionParams.images) {
return new SpnWindowsContainerWebAppValidator_1.SpnWindowsContainerWebAppValidator();
return [new SpnWindowsContainerWebAppValidator_1.SpnWindowsContainerWebAppValidator()];
}
else {
return new SpnWindowsWebAppValidator_1.SpnWindowsWebAppValidator();
return [new SpnWindowsWebAppValidator_1.SpnWindowsWebAppValidator()];
}
}
}
Expand Down
17 changes: 12 additions & 5 deletions lib/DeploymentProvider/DeploymentProviderFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,29 @@ const BaseWebAppDeploymentProvider_1 = require("./Providers/BaseWebAppDeployment
const WebAppContainerDeployment_1 = require("./Providers/WebAppContainerDeployment");
const WebAppDeploymentProvider_1 = require("./Providers/WebAppDeploymentProvider");
const PublishProfileWebAppContainerDeploymentProvider_1 = require("./Providers/PublishProfileWebAppContainerDeploymentProvider");
const WebAppSiteContainersDeploymentProvider_1 = require("./Providers/WebAppSiteContainersDeploymentProvider");
class DeploymentProviderFactory {
static getDeploymentProvider(type) {
if (type === BaseWebAppDeploymentProvider_1.DEPLOYMENT_PROVIDER_TYPES.PUBLISHPROFILE) {
if (!!actionparameters_1.ActionParameters.getActionParams().images) {
return new PublishProfileWebAppContainerDeploymentProvider_1.PublishProfileWebAppContainerDeploymentProvider(type);
return [new PublishProfileWebAppContainerDeploymentProvider_1.PublishProfileWebAppContainerDeploymentProvider(type)];
}
else {
return new WebAppDeploymentProvider_1.WebAppDeploymentProvider(type);
return [new WebAppDeploymentProvider_1.WebAppDeploymentProvider(type)];
}
}
else if (type == BaseWebAppDeploymentProvider_1.DEPLOYMENT_PROVIDER_TYPES.SPN) {
if (!!actionparameters_1.ActionParameters.getActionParams().images || (!!actionparameters_1.ActionParameters.getActionParams().isLinux && !!actionparameters_1.ActionParameters.getActionParams().multiContainerConfigFile)) {
return new WebAppContainerDeployment_1.WebAppContainerDeploymentProvider(type);
if (!!actionparameters_1.ActionParameters.getActionParams().blessedAppSitecontainers) {
return [new WebAppDeploymentProvider_1.WebAppDeploymentProvider(type), new WebAppSiteContainersDeploymentProvider_1.WebAppSiteContainersDeploymentProvider(type)];
}
else if (!!actionparameters_1.ActionParameters.getActionParams().siteContainers) {
return [new WebAppSiteContainersDeploymentProvider_1.WebAppSiteContainersDeploymentProvider(type)];
}
else if (!!actionparameters_1.ActionParameters.getActionParams().images || (!!actionparameters_1.ActionParameters.getActionParams().isLinux && !!actionparameters_1.ActionParameters.getActionParams().multiContainerConfigFile)) {
return [new WebAppContainerDeployment_1.WebAppContainerDeploymentProvider(type)];
}
else {
return new WebAppDeploymentProvider_1.WebAppDeploymentProvider(type);
return [new WebAppDeploymentProvider_1.WebAppDeploymentProvider(type)];
}
}
else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebAppSiteContainersDeploymentProvider = void 0;
const BaseWebAppDeploymentProvider_1 = require("./BaseWebAppDeploymentProvider");
const SiteContainerDeploymentUtility_1 = require("azure-actions-appservice-rest/Utilities/SiteContainerDeploymentUtility");
const core = __importStar(require("@actions/core"));
class WebAppSiteContainersDeploymentProvider extends BaseWebAppDeploymentProvider_1.BaseWebAppDeploymentProvider {
DeployWebAppStep() {
return __awaiter(this, void 0, void 0, function* () {
let siteContainerDeploymentUtility = new SiteContainerDeploymentUtility_1.SiteContainerDeploymentUtility(this.appService);
let siteContainers = this.actionParams.siteContainers;
core.info("Updating site containers");
for (let i = 0; i < siteContainers.length; i++) {
let siteContainer = siteContainers[i];
core.info("updating site container: " + siteContainer.getName());
yield siteContainerDeploymentUtility.updateSiteContainer(siteContainer);
}
});
}
}
exports.WebAppSiteContainersDeploymentProvider = WebAppSiteContainersDeploymentProvider;
21 changes: 21 additions & 0 deletions lib/actionparameters.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActionParameters = exports.appKindMap = exports.WebAppKind = void 0;
const core = __importStar(require("@actions/core"));
const SiteContainer_1 = require("azure-actions-appservice-rest/Arm/SiteContainer");
const github = require('@actions/github');
var WebAppKind;
(function (WebAppKind) {
Expand All @@ -43,6 +44,7 @@ exports.appKindMap = new Map([
]);
class ActionParameters {
constructor(endpoint) {
this._blessedAppSitecontainers = false;
this._publishProfileContent = core.getInput('publish-profile');
this._appName = core.getInput('app-name');
this._slotName = core.getInput('slot-name');
Expand All @@ -61,6 +63,16 @@ class ActionParameters {
this._targetPath = core.getInput('target-path');
this._clean = core.getInput('clean');
this._restart = core.getInput('restart');
// Used for Sitecontainers app.
const siteContainersConfigInput = core.getInput('sitecontainers-config');
if (siteContainersConfigInput) {
const raw = JSON.parse(siteContainersConfigInput);
this._siteContainers = raw.map(SiteContainer_1.SiteContainer.fromJson);
}
else {
this._siteContainers = null;
}
this._blessedAppSitecontainers = core.getInput('blessed-app-sitecontainers') === 'true';
}
static getActionParams(endpoint) {
if (!this.actionparams) {
Expand Down Expand Up @@ -149,5 +161,14 @@ class ActionParameters {
get restart() {
return this._restart;
}
get siteContainers() {
return this._siteContainers;
}
set siteContainers(siteContainers) {
this._siteContainers = siteContainers;
}
get blessedAppSitecontainers() {
return this._blessedAppSitecontainers;
}
}
exports.ActionParameters = ActionParameters;
22 changes: 13 additions & 9 deletions lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,17 @@ function main() {
type = BaseWebAppDeploymentProvider_1.DEPLOYMENT_PROVIDER_TYPES.PUBLISHPROFILE;
}
// Validate action inputs
let validator = yield ValidatorFactory_1.ValidatorFactory.getValidator(type);
yield validator.validate();
var deploymentProvider = DeploymentProviderFactory_1.DeploymentProviderFactory.getDeploymentProvider(type);
core.debug("Predeployment Step Started");
yield deploymentProvider.PreDeploymentStep();
core.debug("Deployment Step Started");
yield deploymentProvider.DeployWebAppStep();
let validators = yield ValidatorFactory_1.ValidatorFactory.getValidator(type);
for (const validator of validators) {
yield validator.validate();
}
var deploymentProviders = DeploymentProviderFactory_1.DeploymentProviderFactory.getDeploymentProvider(type);
for (const provider of deploymentProviders) {
core.info("Predeployment Step Started");
yield provider.PreDeploymentStep();
core.info("Deployment Step Started");
yield provider.DeployWebAppStep();
}
}
catch (error) {
isDeploymentSuccess = false;
Expand All @@ -81,8 +85,8 @@ function main() {
}
}
finally {
if (deploymentProvider != null) {
yield deploymentProvider.UpdateDeploymentStatus(isDeploymentSuccess);
if (deploymentProviders != null) {
yield deploymentProviders[0].UpdateDeploymentStatus(isDeploymentSuccess);
}
// Reset AZURE_HTTP_USER_AGENT
core.exportVariable('AZURE_HTTP_USER_AGENT', prefix);
Expand Down
16 changes: 0 additions & 16 deletions node_modules/.bin/create-jest

This file was deleted.

17 changes: 0 additions & 17 deletions node_modules/.bin/create-jest.cmd

This file was deleted.

Loading
Loading