Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
145a068
update node_modules
sgollapudi77 Oct 11, 2023
2066c99
Updated node version to 20
ShilpiR Apr 8, 2024
4d68fbb
npm install and build tasks made conditional
ShilpiR Apr 5, 2024
b2f8793
Merge pull request #419 from Azure/shilpirachna1/fixworkflowsv3
ShilpiRachna1 Apr 8, 2024
7a68e65
Updated node version to 20
ShilpiR Apr 8, 2024
995019b
Merge branch 'shilpirachna1/update-nodeversion-relv3' of https://gith…
ShilpiR Apr 8, 2024
de617f4
Merge pull request #418 from Azure/shilpirachna1/update-nodeversion-r…
surenderssm Apr 8, 2024
9f08f5e
Handled slotname in AzureResourceFilterUtility
ShilpiRach Aug 1, 2024
6a01e8e
Fixing pr workflow
ShilpiRach Jul 21, 2024
ea97805
Fixing test workflow
ShilpiRach Jul 21, 2024
c78472a
Fixing test workflow
ShilpiRach Jul 21, 2024
a5be3a6
Fixing pr workflow
ShilpiRach Jul 21, 2024
48ca679
Merge pull request #434 from Azure/shilpirachna1/cifixv3
ShilpiRachna1 Aug 1, 2024
22fbf64
Merge branch 'releases/v3' into shilpirachna1/slotfixv3
ShilpiRach Aug 1, 2024
2fdd5c3
Merge pull request #433 from Azure/shilpirachna1/slotfixv3
ShilpiRachna1 Aug 2, 2024
e25c944
sidecar github action changes
kumaraksh1 Jul 8, 2025
452daf7
adding changes for sidecar
kumaraksh1 Jul 9, 2025
c668699
add changes for sidecar
kumaraksh1 Jul 9, 2025
e2e8a7b
added changes for sitecontainers
kumaraksh1 Jul 9, 2025
828cffa
code refactoring
kumaraksh1 Jul 9, 2025
ccbd244
added changes for spn type auth for sidecar
kumaraksh1 Jul 10, 2025
0886c64
push for testing
kumaraksh1 Jul 10, 2025
7cc0e4c
updated main
kumaraksh1 Jul 10, 2025
8afa26b
adding logs
kumaraksh1 Jul 10, 2025
86304b8
adding changes
kumaraksh1 Jul 10, 2025
4f68366
adding changes
kumaraksh1 Jul 10, 2025
174dc0c
adding changes
kumaraksh1 Jul 10, 2025
96bfa88
updated package
kumaraksh1 Jul 10, 2025
6208b1e
adding logs
kumaraksh1 Jul 10, 2025
035a333
changes for blessed sitecontainers scenario
kumaraksh1 Jul 10, 2025
7f2e1b8
add changes
kumaraksh1 Jul 10, 2025
deed113
adding logs
kumaraksh1 Jul 10, 2025
3059f65
fix bug
kumaraksh1 Jul 10, 2025
3e61b14
updating a package
kumaraksh1 Jul 11, 2025
223e3cb
updating package
kumaraksh1 Jul 11, 2025
b177f03
update package
kumaraksh1 Jul 11, 2025
ee8af12
update package
kumaraksh1 Jul 11, 2025
573f4fe
adding publish profile validation
kumaraksh1 Jul 11, 2025
37a6a25
deleting node modules
kumaraksh1 Jul 12, 2025
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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ FakesAssemblies/

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# node_modules/

# Visual Studio 6 build log
*.plg
Expand Down
7 changes: 7 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ inputs:
configuration-file:
description: 'Applies to Web App Containers only: Path of the Docker-Compose file. Should be a fully qualified path or relative to the default working directory. Required for multi-container scenario'
required: false
sitecontainers-config:
description: 'Applies to Sitecontainers'
required: false
startup-command:
description: 'Enter the start up command. For ex. dotnet run or dotnet run'
required: false
Expand All @@ -40,6 +43,10 @@ inputs:
restart:
description: 'Restart the app service after deployment'
required: false
blessed-app-sitecontainers:
description: 'Applies to apps with sidecars'
required: false
default: 'false'

outputs:
webapp-url:
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
@@ -0,0 +1,27 @@
"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.PublishProfileSiteContainersWebAppValidator = void 0;
const Validations_1 = require("../Validations");
const actionparameters_1 = require("../../actionparameters");
class PublishProfileSiteContainersWebAppValidator {
validate() {
return __awaiter(this, void 0, void 0, function* () {
const actionParams = actionparameters_1.ActionParameters.getActionParams();
(0, Validations_1.packageNotAllowed)(actionParams.packageInput);
(0, Validations_1.multiContainerNotAllowed)(actionParams.multiContainerConfigFile);
(0, Validations_1.startupCommandNotAllowed)(actionParams.startupCommand);
(0, Validations_1.validateAppDetails)();
(0, Validations_1.validateSiteContainersInputs)();
});
}
}
exports.PublishProfileSiteContainersWebAppValidator = PublishProfileSiteContainersWebAppValidator;
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;
39 changes: 32 additions & 7 deletions lib/ActionInputValidator/Validations.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
}) : 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 __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__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 @@ -35,12 +45,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.appNameIsRequired = appNameIsRequired;
exports.containerInputsNotAllowed = containerInputsNotAllowed;
exports.validateAppDetails = validateAppDetails;
exports.siteContainersConfigNotAllowed = siteContainersConfigNotAllowed;
exports.startupCommandNotAllowed = startupCommandNotAllowed;
exports.packageNotAllowed = packageNotAllowed;
exports.multiContainerNotAllowed = multiContainerNotAllowed;
exports.validateSingleContainerInputs = validateSingleContainerInputs;
exports.validateContainerInputs = validateContainerInputs;
exports.validatePackageInput = validatePackageInput;
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 @@ -72,6 +84,12 @@ function validateAppDetails() {
}
}
}
// Error if Sidecar configuration is provided
function siteContainersConfigNotAllowed(siteContainers) {
if (!!siteContainers) {
throw new Error("SiteContainers not valid input for this web app.");
}
}
// Error is startup command is provided
function startupCommandNotAllowed(startupCommand) {
if (!!startupCommand) {
Expand Down Expand Up @@ -136,3 +154,10 @@ function validatePackageInput() {
}
});
}
// validate site containers inputs
function validateSiteContainersInputs() {
const actionParams = actionparameters_1.ActionParameters.getActionParams();
if (!actionParams.siteContainers || actionParams.siteContainers.length === 0) {
throw new Error("Site containers not provided.");
}
}
68 changes: 60 additions & 8 deletions lib/ActionInputValidator/ValidatorFactory.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,37 @@
"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 () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__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 +47,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,39 +59,57 @@ 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();
let validators = [];
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();
validators.push(new PublishProfileContainerWebAppValidator_1.PublishProfileContainerWebAppValidator());
}
else {
return new PublishProfileWebAppValidator_1.PublishProfileWebAppValidator();
validators.push(new PublishProfileWebAppValidator_1.PublishProfileWebAppValidator());
}
return validators;
}
else if (type == BaseWebAppDeploymentProvider_1.DEPLOYMENT_PROVIDER_TYPES.SPN) {
// app-name is required to get resource details
core.info("Validating app name is required for SPN deployment");
(0, Validations_1.appNameIsRequired)(actionParams.appName);
yield this.getResourceDetails(actionParams);
core.info("validated app details");
if (!!actionParams.isLinux) {
if (!!actionParams.images || !!actionParams.multiContainerConfigFile) {
return new SpnLinuxContainerWebAppValidator_1.SpnLinuxContainerWebAppValidator();
core.info("Validating Linux app details");
if (!!actionParams.blessedAppSitecontainers) {
validators.push(new SpnWebAppSiteContainersValidator_1.SpnWebAppSiteContainersValidator());
validators.push(new SpnLinuxWebAppValidator_1.SpnLinuxWebAppValidator());
}
else if (!!actionParams.siteContainers) {
core.info("Validating site containers app details");
validators.push(new SpnWebAppSiteContainersValidator_1.SpnWebAppSiteContainersValidator());
}
else if (!!actionParams.images || !!actionParams.multiContainerConfigFile) {
validators.push(new SpnLinuxContainerWebAppValidator_1.SpnLinuxContainerWebAppValidator());
}
else {
return new SpnLinuxWebAppValidator_1.SpnLinuxWebAppValidator();
validators.push(new SpnLinuxWebAppValidator_1.SpnLinuxWebAppValidator());
}
}
else {
if (!!actionParams.images) {
return new SpnWindowsContainerWebAppValidator_1.SpnWindowsContainerWebAppValidator();
validators.push(new SpnWindowsContainerWebAppValidator_1.SpnWindowsContainerWebAppValidator());
}
else {
return new SpnWindowsWebAppValidator_1.SpnWindowsWebAppValidator();
validators.push(new SpnWindowsWebAppValidator_1.SpnWindowsWebAppValidator());
}
}
return validators;
}
else {
throw new Error("Valid credentials are not available. Add Azure Login action before this action or provide publish-profile input.");
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)];
}
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
Expand Up @@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
}) : 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 __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__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 Down Expand Up @@ -76,6 +86,7 @@ class BaseWebAppDeploymentProvider {
initializeForSPN() {
return __awaiter(this, void 0, void 0, function* () {
this.appService = new azure_app_service_1.AzureAppService(this.actionParams.endpoint, this.actionParams.resourceGroupName, this.actionParams.appName, this.actionParams.slotName);
core.info('Using Azure App Service:' + this.appService);
this.appServiceUtility = new AzureAppServiceUtility_1.AzureAppServiceUtility(this.appService);
this.kuduService = yield this.appServiceUtility.getKuduService();
this.kuduServiceUtility = new KuduServiceUtility_1.KuduServiceUtility(this.kuduService);
Expand Down
Loading
Loading