Skip to content

Commit

Permalink
FIO-8506: Gh Action To Publish Protected Eval (#6)
Browse files Browse the repository at this point in the history
* Needed to make some edits in order for it to build correctly.

* Adds PR template and ci.yml file

* View deploy output test

* Publish dry run

* First publish to dev tag

* Only publishes if target branch is equal to master
  • Loading branch information
ryanformio authored Jul 19, 2024
1 parent 93103b8 commit 9a4b5c7
Show file tree
Hide file tree
Showing 13 changed files with 320 additions and 79 deletions.
35 changes: 35 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## Link to Jira Ticket

https://formio.atlassian.net/browse/FIO-XXXX

## Description

**What changed?**

*Use this section to provide a summary description of the changes you've made*

**Why have you chosen this solution?**

*Use this section to justify your choices*

## Breaking Changes / Backwards Compatibility

*Use this section to describe any potentially breaking changes this PR introduces or any effects this PR might have on backwards compatibility*

## Dependencies

*Use this section to list any dependent changes/PRs in other Form.io modules*

## How has this PR been tested?

*Use this section to describe how you tested your changes; if you haven't included automated tests, justify your reasoning*

## Checklist:

- [ ] I have completed the above PR template
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation (if applicable)
- [ ] My changes generate no new warnings
- [ ] My changes include tests that prove my fix is effective (or that my feature works as intended)
- [ ] New and existing unit/integration tests pass locally with my changes
- [ ] Any dependent changes have corresponding PRs that are listed above
117 changes: 117 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: Build, Publish

on:
pull_request:
types: [opened, synchronize]

env:
NODE_VERSION: 20.x

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository code ${{ github.repository }} on ${{ github.ref }}
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git user
run: |
git config --global user.email "pkgbot@form.io"
git config --global user.name "pkgbot"
- name: Merge target branch into current branch
run: |
git fetch origin ${{ github.event.pull_request.base.ref }}:${{ github.event.pull_request.base.ref }}
git merge ${{ github.event.pull_request.base.ref }} --no-commit --no-ff
- name: Check for merge conflicts
run: |
if ! git merge --no-commit --no-ff ${{ github.event.pull_request.base.ref }}; then
echo "Merge conflicts detected."
git merge --abort
exit 1
else
echo "Merge successful."
fi
- name: Set up Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
cache: "npm"

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Cache node modules
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node-
- name: Build
uses: borales/actions-yarn@v4
with:
cmd: build

- name: Upload build artifact
uses: actions/upload-artifact@v3
with:
name: build-artifact
path: |
dist/
lib/
Changelog.md
README.md
package.json
publish:
needs: build
if: github.event.pull_request.base.ref == 'master'
runs-on: ubuntu-latest
steps:
- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: build-artifact
path: ./

- name: View downloaded build output
run: ls -a

- name: Add npm token to .npmrc
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
- name: Prepare version for publish
id: prep
run: |
# Extract the pull request number and the short SHA of the commit
PR_NUMBER=$(echo ${{ github.event.number }})
COMMIT_SHORT_SHA=$(echo "${{ github.event.pull_request.head.sha }}" | cut -c1-7)
# Extract the current version from package.json
CURRENT_VERSION=$(node -p "require('./package.json').version")
# If the current version includes '-rc.', remove it and everything after
# This step ensures that we start with a base version like '3.0.0' even if it was a release candidate
BASE_VERSION=$(echo "$CURRENT_VERSION" | cut -d'-' -f1)
# Construct the new version string
NEW_VERSION="${BASE_VERSION}-dev.${PR_NUMBER}.${COMMIT_SHORT_SHA}"
# Output the new version for use in subsequent GitHub Actions steps
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
- name: Echo version to publish
run: |
echo "Version to publish: $NEW_VERSION"
- name: Publish to npm
run: |
npm version $NEW_VERSION
yarn publish --tag dev
2 changes: 1 addition & 1 deletion dist/protected-eval.js

Large diffs are not rendered by default.

38 changes: 38 additions & 0 deletions dist/protected-eval.js.LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,29 @@
/*!
* Signature Pad v4.2.0 | https://github.com/szimek/signature_pad
* (c) 2024 Szymon Nowak | Released under the MIT license
*/

/*!
* https://github.com/Starcounter-Jack/JSON-Patch
* (c) 2017-2021 Joachim Wester
* MIT license
*/

/*!
* https://github.com/Starcounter-Jack/JSON-Patch
* (c) 2017-2022 Joachim Wester
* MIT licensed
*/

/*! @formio/choices.js v10.2.1 | © 2024 Josh Johnson | https://github.com/jshjohnson/Choices#readme */

/*! @license DOMPurify 3.1.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.5/LICENSE */

/*! Native Promise Only
v0.8.1 (c) Kyle Simpson
MIT License: http://getify.mit-license.org
*/

/**
* @license
* Lodash <https://lodash.com/>
Expand All @@ -6,3 +32,15 @@
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/

//! Copyright (c) JS Foundation and other contributors

//! github.com/moment/moment-timezone

//! license : MIT

//! moment-timezone.js

//! moment.js

//! version : 0.5.45
2 changes: 1 addition & 1 deletion lib/FormioUtils.d.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
import { Utils as FormioUtils } from 'formiojs';
import { Utils as FormioUtils } from '@formio/js';
export default FormioUtils;
12 changes: 6 additions & 6 deletions lib/FormioUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
var formiojs_1 = require("formiojs");
var js_1 = require("@formio/js");
var lodash_1 = require("./utils/lodash");
var baseEvaluate = formiojs_1.Utils.evaluate;
formiojs_1.Utils.evaluate = function evaluate(func, args, ret, tokenize) {
var baseEvaluate = js_1.Utils.evaluate;
js_1.Utils.evaluate = function evaluate(func, args, ret, tokenize) {
var rest = [];
for (var _i = 4; _i < arguments.length; _i++) {
rest[_i - 4] = arguments[_i];
}
if (!formiojs_1.Utils.Evaluator.protectedEval || typeof func !== 'string') {
if (!js_1.Utils.Evaluator.protectedEval || typeof func !== 'string') {
return baseEvaluate.apply(void 0, __spreadArray([func, args, ret, tokenize], rest, false));
}
var returnVal = null;
Expand All @@ -53,7 +53,7 @@ formiojs_1.Utils.evaluate = function evaluate(func, args, ret, tokenize) {
});
}
try {
returnVal = formiojs_1.Utils.Evaluator.evaluate(func, __assign(__assign({}, args), { _: lodash_1.lodash }));
returnVal = js_1.Utils.Evaluator.evaluate(func, __assign(__assign({}, args), { _: lodash_1.lodash }));
}
catch (err) {
console.warn("An error occured within the custom function for ".concat(componentKey), err);
Expand All @@ -62,4 +62,4 @@ formiojs_1.Utils.evaluate = function evaluate(func, args, ret, tokenize) {
}
return returnVal;
};
exports.default = formiojs_1.Utils;
exports.default = js_1.Utils;
6 changes: 3 additions & 3 deletions lib/ProtectedEvaluator.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var formiojs_1 = require("formiojs");
var js_1 = require("@formio/js");
var js_interpreter_1 = __importDefault(require("js-interpreter"));
var baseEvaluator = formiojs_1.Utils.Evaluator.evaluator;
var baseEvaluate = formiojs_1.Utils.Evaluator.evaluate;
var baseEvaluator = js_1.Utils.Evaluator.evaluator;
var baseEvaluate = js_1.Utils.Evaluator.evaluate;
var excludedVariables = ['instance', 'self', 'options'];
var Evaluator = {
noeval: true,
Expand Down
16 changes: 14 additions & 2 deletions lib/utils/lodash.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.lodash = void 0;
var lodash_1 = __importDefault(require("lodash"));
var operators_1 = require("formiojs/utils/jsonlogic/operators");
exports.lodash = operators_1.lodashOperators.reduce(function (obj, operator) { return lodash_1.default.set(obj, operator, lodash_1.default[operator]); }, {});
var lodash_2 = require("lodash");
var lodashOperators = [
lodash_2.chunk, lodash_2.compact, lodash_2.concat, lodash_2.difference, lodash_2.differenceBy, lodash_2.differenceWith,
lodash_2.drop, lodash_2.dropRight, lodash_2.dropRightWhile, lodash_2.dropWhile, lodash_2.findIndex, lodash_2.findLastIndex,
lodash_2.first, lodash_2.flatten, lodash_2.flattenDeep, lodash_2.flattenDepth, lodash_2.fromPairs, lodash_2.head, lodash_2.indexOf,
lodash_2.initial, lodash_2.intersection, lodash_2.intersectionBy, lodash_2.intersectionWith, lodash_2.join, lodash_2.last,
lodash_2.lastIndexOf, lodash_2.nth, lodash_2.pull, lodash_2.pullAll, lodash_2.pullAllBy, lodash_2.pullAllWith, lodash_2.pullAt, lodash_2.remove,
lodash_2.reverse, lodash_2.slice, lodash_2.sortedIndex, lodash_2.sortedIndexBy, lodash_2.sortedIndexOf, lodash_2.sortedLastIndex,
lodash_2.sortedLastIndexBy, lodash_2.sortedLastIndexOf, lodash_2.sortedUniq, lodash_2.sortedUniqBy, lodash_2.tail,
lodash_2.take, lodash_2.takeRight, lodash_2.takeRightWhile, lodash_2.takeWhile, lodash_2.union, lodash_2.unionBy, lodash_2.unionWith,
lodash_2.uniq, lodash_2.uniqBy, lodash_2.uniqWith, lodash_2.unzip, lodash_2.unzipWith, lodash_2.without, lodash_2.xor, lodash_2.xorBy, lodash_2.xorWith,
lodash_2.zip, lodash_2.zipObject, lodash_2.zipObjectDeep, lodash_2.zipWith
];
exports.lodash = lodashOperators.reduce(function (obj, operator) { return lodash_1.default.set(obj, operator.name, operator); }, {});
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"author": "",
"license": "ISC",
"devDependencies": {
"@formio/js": "^5.0.0-rc.54",
"@formio/js": "5.0.0-rc.19",
"@typescript-eslint/eslint-plugin": "^7.10.0",
"@typescript-eslint/parser": "^7.10.0",
"eslint": "^9.3.0",
Expand All @@ -33,7 +33,7 @@
"webpack-cli": "^5.1.4"
},
"peerDependencies": {
"@formio/js": "^5.0.0-rc.54"
"@formio/js": "5.0.0-rc.19"
},
"dependencies": {
"js-interpreter": "https://github.com/formio/JS-Interpreter#v1.1.0-formio.3",
Expand Down
2 changes: 1 addition & 1 deletion src/FormioUtils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {Utils as FormioUtils} from 'formiojs';
import {Utils as FormioUtils} from '@formio/js';

import {lodash as _} from './utils/lodash';

Expand Down
2 changes: 1 addition & 1 deletion src/ProtectedEvaluator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {Utils as FormioUtils} from 'formiojs';
import {Utils as FormioUtils} from '@formio/js';
import Interpreter from 'js-interpreter';

const baseEvaluator = FormioUtils.Evaluator.evaluator;
Expand Down
29 changes: 27 additions & 2 deletions src/utils/lodash.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
import _ from 'lodash';
import {
chunk, compact, concat, difference, differenceBy, differenceWith,
drop, dropRight, dropRightWhile, dropWhile, findIndex, findLastIndex,
first, flatten, flattenDeep, flattenDepth, fromPairs, head, indexOf,
initial, intersection, intersectionBy, intersectionWith, join, last,
lastIndexOf, nth, pull, pullAll, pullAllBy, pullAllWith, pullAt, remove,
reverse, slice, sortedIndex, sortedIndexBy, sortedIndexOf, sortedLastIndex,
sortedLastIndexBy, sortedLastIndexOf, sortedUniq, sortedUniqBy, tail,
take, takeRight, takeRightWhile, takeWhile, union, unionBy, unionWith,
uniq, uniqBy, uniqWith, unzip, unzipWith, without, xor, xorBy, xorWith,
zip, zipObject, zipObjectDeep, zipWith
} from 'lodash';

const lodashOperators = [
chunk, compact, concat, difference, differenceBy, differenceWith,
drop, dropRight, dropRightWhile, dropWhile, findIndex, findLastIndex,
first, flatten, flattenDeep, flattenDepth, fromPairs, head, indexOf,
initial, intersection, intersectionBy, intersectionWith, join, last,
lastIndexOf, nth, pull, pullAll, pullAllBy, pullAllWith, pullAt, remove,
reverse, slice, sortedIndex, sortedIndexBy, sortedIndexOf, sortedLastIndex,
sortedLastIndexBy, sortedLastIndexOf, sortedUniq, sortedUniqBy, tail,
take, takeRight, takeRightWhile, takeWhile, union, unionBy, unionWith,
uniq, uniqBy, uniqWith, unzip, unzipWith, without, xor, xorBy, xorWith,
zip, zipObject, zipObjectDeep, zipWith
];

export const lodash = lodashOperators.reduce((obj, operator) => _.set(obj, operator.name, operator), {});

import {lodashOperators} from 'formiojs/utils/jsonlogic/operators';

export const lodash = lodashOperators.reduce((obj, operator) => _.set(obj, operator, _[operator]), {});
Loading

0 comments on commit 9a4b5c7

Please sign in to comment.