Skip to content

Commit

Permalink
Fix action filters for multi-pkg support (#26)
Browse files Browse the repository at this point in the history
* Fix action filters for multi-pkg support

* fix windows tests
  • Loading branch information
moritzraho authored Jan 25, 2021
1 parent ab0785b commit 09183f8
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 12 deletions.
8 changes: 6 additions & 2 deletions src/build-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,17 @@ const buildActions = async (config, filterActions) => {
if (!config.app.hasBackend) {
throw new Error('cannot build actions, app has no backend')
}

// rewrite config
const modifiedConfig = utils.replacePackagePlaceHolder(config)

if (filterActions) {
// If using old format of <actionname>, convert it to <package>/<actionname> using default/first package in the manifest
filterActions = filterActions.map((actionName) => actionName.indexOf('/') === -1 ? config.ow.package + '/' + actionName : actionName)
filterActions = filterActions.map((actionName) => actionName.indexOf('/') === -1 ? modifiedConfig.ow.package + '/' + actionName : actionName)
}

// clear out dist dir
fs.emptyDirSync(config.actions.dist)
const modifiedConfig = utils.replacePackagePlaceHolder(config)
const builtList = []
for (const [pkgName, pkg] of Object.entries(modifiedConfig.manifest.full.packages)) {
const actionsToBuild = Object.entries(pkg.actions)
Expand Down
21 changes: 11 additions & 10 deletions src/deploy-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,6 @@ async function deployActions (config, deployConfig = {}, logFunc) {
throw new Error(`missing files in ${utils._relApp(config.root, dist)}, maybe you forgot to build your actions ?`)
}

const filterEntities = deployConfig.filterEntities
if (deployConfig.filterEntities) {
// If using old format of <actionname>, convert it to <package>/<actionname> using default/first package in the manifest
packageItems.forEach((k) => {
if (deployConfig.filterEntities[k]) {
filterEntities[k] = deployConfig.filterEntities[k].map((actionName) => actionName.indexOf('/') === -1 ? config.ow.package + '/' + actionName : actionName)
}
})
}

// 1. rewrite wskManifest config
const modifiedConfig = utils.replacePackagePlaceHolder(config)
const manifest = modifiedConfig.manifest.full
Expand All @@ -77,6 +67,17 @@ async function deployActions (config, deployConfig = {}, logFunc) {
}
}

const filterEntities = deployConfig.filterEntities
if (deployConfig.filterEntities) {
// If using old format of <actionname>, convert it to <package>/<actionname> using default/first package in the manifest
packageItems.forEach((k) => {
if (deployConfig.filterEntities[k]) {
filterEntities[k] = deployConfig.filterEntities[k].map((actionName) =>
actionName.indexOf('/') === -1 ? modifiedConfig.ow.package + '/' + actionName : actionName)
}
})
}

// 2. deploy manifest
const deployedEntities = await deployWsk(
modifiedConfig,
Expand Down
30 changes: 30 additions & 0 deletions test/deploy.actions.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,36 @@ test('if actions are deployed with custom package and part of the manifest it sh
})
})

test('custom package and action filter', async () => {
addNamedPackageFiles()

// mock deployed entities
runtimeLibUtils.processPackage.mockReturnValue(deepCopy(mockEntities))

const filterEntities = {
actions: ['bobby-mcgee/action-zip', 'action'] // make sure filter works with pkg/action or just action-name
}

const buildDir = global.namedPackageConfig.actions.dist
// fake a previous build
addFakeFiles(buildDir)

await deployActions(global.namedPackageConfig, { filterEntities })

expect(runtimeLibUtils.processPackage).toHaveBeenCalledWith({
'bobby-mcgee': expect.objectContaining({
actions: {
action: {
function: path.normalize('dist/actions/action.zip'), runtime: 'nodejs:12', web: 'yes'
},
'action-zip': {
function: path.normalize('dist/actions/action-zip.zip'), runtime: 'nodejs:12', web: 'yes'
}
}
})
}, {}, {}, {}, false, expect.any(Object))
})

test('if actions are deployed with the headless validator and there is a UI it should rewrite the sequence with the app-registry validator', async () => {
addSampleAppFiles()

Expand Down

0 comments on commit 09183f8

Please sign in to comment.