Skip to content

Commit

Permalink
Merge branch 'master' into ADO-1406-add-link-to-creator-hub
Browse files Browse the repository at this point in the history
* master: (27 commits)
  fix: Include cypress TypeScript types in /cypress folder (no-changelog) (#7746)
  refactor(core): Stop reporting to Sentry `NodeApiError` outside 500 range (no-changelog) (#7753)
  fix(core): Guard against node not found on cancelling test webhook (#7750)
  fix(JotForm Trigger Node): Fix iteration on form loader (#7751)
  refactor(core): Stop reporting to Sentry unknown cred on mapping (no-changelog) (#7752)
  feat(core): Coordinate manual workflow activation and deactivation in multi-main scenario (#7643)
  ci: Fix "Release: Create Pull Request" workflow
  fix(editor): Fix Admin panel icon in the sidebar for cloud deployments (no-changelog) (#7738)
  fix(editor): Remove `n8nHooksNext` flag (no-changelog) (#7733)
  fix(editor): Show v1 banner dismiss button if owner (#7722)
  fix(GitHub Node): Fix issue preventing file edits on branches (#7734)
  fix(core): Fix all dependency versions for backend packages (no-changelog) (#7745)
  refactor(core): Convert dynamic node-parameter routes to a decorated controller (no-changelog) (#7284)
  refactor: Stop reporting to Sentry Facebook multi-webhook error (no-changelog) (#7743)
  refactor(core): Stop reporting to Sentry unrecognized node errors (no-changelog) (#7728)
  fix(core): Account for non-ASCII chars in filename on binary data download (#7742)
  ci: Fix DB tests and Workflow tests (no-changelog) (#7741)
  refactor: Extract Invitation routes to InvitationController (no-changelog) (#7726)
  fix(editor): Handle permission edge cases (empty scopes) (#7723)
  ci: Skip the regularly failing tests in 2-credentials.cy.ts (no-changelog) (#7736)
  ...
  • Loading branch information
MiloradFilipovic committed Nov 20, 2023
2 parents a9535ce + c9f6ea1 commit 4a2f4f9
Show file tree
Hide file tree
Showing 132 changed files with 4,013 additions and 2,324 deletions.
2 changes: 1 addition & 1 deletion .github/scripts/bump-versions.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ for (const packageName in packageMap) {

packageJson.version = packageMap[packageName].nextVersion =
isDirty ||
Object.keys(packageJson.dependencies).some(
Object.keys(packageJson.dependencies || {}).some(
(dependencyName) => packageMap[dependencyName]?.isDirty,
)
? semver.inc(version, releaseType)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-postgres-mysql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- run: pnpm install --frozen-lockfile

- name: Build Backend
run: pnpm --filter @n8n/client-oauth2 --filter n8n-workflow --filter n8n-core --filter n8n build
run: pnpm build:backend

- name: Cache build artifacts
uses: actions/cache/save@v3.3.1
Expand Down
15 changes: 14 additions & 1 deletion .github/workflows/release-push-to-channel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,17 @@ jobs:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- run: docker buildx imagetools create -t n8nio/n8n:${{ github.event.inputs.release-channel }} n8nio/n8n:${{ github.event.inputs.version }}
- run: docker buildx imagetools create -t ${{ secrets.DOCKER_USERNAME }}/n8n:${{ github.event.inputs.release-channel }} ${{ secrets.DOCKER_USERNAME }}/n8n:${{ github.event.inputs.version }}

release-to-github-container-registry:
name: Release to GitHub Container Registry
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: docker/login-action@v2.2.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- run: docker buildx imagetools create -t ghcr.io/${{ github.repository_owner }}/n8n:${{ github.event.inputs.release-channel }} ghcr.io/${{ github.repository_owner }}/n8n:${{ github.event.inputs.version }}
2 changes: 1 addition & 1 deletion .github/workflows/test-workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
working-directory: n8n
run: |
pnpm install --frozen-lockfile
pnpm --filter @n8n/client-oauth2 --filter n8n-workflow --filter n8n-core --filter n8n-nodes-base --filter n8n build
pnpm build:backend
shell: bash

- name: Import credentials
Expand Down
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,47 @@
# [1.17.0](https://github.com/n8n-io/n8n/compare/n8n@1.16.0...n8n@1.17.0) (2023-11-15)


### Bug Fixes

* **Convert to/from binary data Node:** Better mime type defaults ([#7693](https://github.com/n8n-io/n8n/issues/7693)) ([9b3be0c](https://github.com/n8n-io/n8n/commit/9b3be0cfd8b0b58903d89ea3bf0b73be579a4f89))
* **core:** Consider subworkflows successfully run when in waiting state ([#7699](https://github.com/n8n-io/n8n/issues/7699)) ([0e00dab](https://github.com/n8n-io/n8n/commit/0e00dab9f5d5a6622cdc22fa8bfbecc039f6b67a))
* **core:** Fix named parameter resolution in migrations ([#7688](https://github.com/n8n-io/n8n/issues/7688)) ([4441ed5](https://github.com/n8n-io/n8n/commit/4441ed51169e8be930c548b17f54147ff6bd8e7d)), closes [#7628](https://github.com/n8n-io/n8n/issues/7628)
* **core:** Initialize JWT Secret before it's used anywhere ([#7707](https://github.com/n8n-io/n8n/issues/7707)) ([3460eb5](https://github.com/n8n-io/n8n/commit/3460eb5eeba95e51ccdac05084daf883c9750022))
* **core:** Reduce memory usage in credentials risk auditing ([#7663](https://github.com/n8n-io/n8n/issues/7663)) ([9fd6319](https://github.com/n8n-io/n8n/commit/9fd6319583d0446e41de4fb80d4bc5a6c5e1ca07))
* **Date & Time Node:** Add fromFormat option to solve ambiguous date strings ([#7675](https://github.com/n8n-io/n8n/issues/7675)) ([d2d11e0](https://github.com/n8n-io/n8n/commit/d2d11e0208e8a20145910bbdd02e7b273fb0aa13))
* **editor:** Fix resource mapper component being truncated ([#7664](https://github.com/n8n-io/n8n/issues/7664)) ([00dff50](https://github.com/n8n-io/n8n/commit/00dff50140d12e37bfeecdf1300ff313c179ec89))
* **editor:** More securely clear executions tab auto refresh timer ([#7685](https://github.com/n8n-io/n8n/issues/7685)) ([37dd658](https://github.com/n8n-io/n8n/commit/37dd658dc5bc1128c91d86105bf7f49dfcf96985))
* **editor:** Redirect to workflow editor after saving in debug mode ([#7645](https://github.com/n8n-io/n8n/issues/7645)) ([020042e](https://github.com/n8n-io/n8n/commit/020042ef1a329e805035061fbf6743bde892e3b1))
* **Google Sheets Node:** Append exceeding grid limits ([#7684](https://github.com/n8n-io/n8n/issues/7684)) ([88efb99](https://github.com/n8n-io/n8n/commit/88efb9958711bac446b6a698dfba50afd2b46132))
* **HTTP Request Node:** Support generic credentials when using pagination ([#7686](https://github.com/n8n-io/n8n/issues/7686)) ([48b240b](https://github.com/n8n-io/n8n/commit/48b240b0269858adb8fde8abb8a7211b2a3e78e0)), closes [#7653](https://github.com/n8n-io/n8n/issues/7653)
* **HubSpot Node:** Fetching available parameters fails when using expressions ([#7672](https://github.com/n8n-io/n8n/issues/7672)) ([a9ab738](https://github.com/n8n-io/n8n/commit/a9ab73896e6a42b2fd5df296c9ee95ac82936b7e))
* **HubSpot Node:** Update deal owner on Hubspot Deal ([#7673](https://github.com/n8n-io/n8n/issues/7673)) ([3c0734b](https://github.com/n8n-io/n8n/commit/3c0734bd2d92e9d2b9e99658c2e14710f57f36ef))
* **Spreadsheet File Node:** Read file as utf-8 in v1 ([#7701](https://github.com/n8n-io/n8n/issues/7701)) ([786b4ad](https://github.com/n8n-io/n8n/commit/786b4adcce910fa52104550d90a688c4046628f9))


### Features

* **core:** Expression function $ifEmpty ([#7660](https://github.com/n8n-io/n8n/issues/7660)) ([1c7225e](https://github.com/n8n-io/n8n/commit/1c7225ebdb1d92ce45313bbab27b0839d963fc4c))
* **Date & Time Node:** Option to include other fields in output item ([#7661](https://github.com/n8n-io/n8n/issues/7661)) ([aea3c50](https://github.com/n8n-io/n8n/commit/aea3c501313debaf1cf2b194023a534f829290ea))
* **Discord Node:** Overhaul ([#5351](https://github.com/n8n-io/n8n/issues/5351)) ([6a53c2a](https://github.com/n8n-io/n8n/commit/6a53c2a375ca71ffad1491da5ae7e6ec461a1a56))
* **Discourse Node:** Add new options to Get Users ([#7674](https://github.com/n8n-io/n8n/issues/7674)) ([2e8c841](https://github.com/n8n-io/n8n/commit/2e8c841277c2ba45ab2ab3e823135f2b15a7e570))
* **editor:** Add color selector to sticky node ([#7453](https://github.com/n8n-io/n8n/issues/7453)) ([8359364](https://github.com/n8n-io/n8n/commit/8359364536809e667be86f4b4df0838c94a801d7))
* **editor:** Add HTTP request nodes for credentials without a node ([#7157](https://github.com/n8n-io/n8n/issues/7157)) ([14035e1](https://github.com/n8n-io/n8n/commit/14035e1244fee5bc49b9afe57d63d9e887f25dd0))
* **editor:** Add workflow filters to querystring ([#7456](https://github.com/n8n-io/n8n/issues/7456)) ([afd637b](https://github.com/n8n-io/n8n/commit/afd637b5eab2bba33fd9ec8b24104bef5e2a4cc0))
* **editor:** Adds a EE view to show worker details and job status ([#7600](https://github.com/n8n-io/n8n/issues/7600)) ([cbc6909](https://github.com/n8n-io/n8n/commit/cbc690907fa36e2fde0218dd6f7737d00498c674))
* **GitLab Node:** Add support for pagination on getIssues ([#7529](https://github.com/n8n-io/n8n/issues/7529)) ([0a0798e](https://github.com/n8n-io/n8n/commit/0a0798e48500b0c159aa37deae7ce5d144f4f4c7))
* **OpenAI Node:** Add dall-e-3 support ([#7655](https://github.com/n8n-io/n8n/issues/7655)) ([a9c7188](https://github.com/n8n-io/n8n/commit/a9c7188c4d9d3a020cb26647c9030f6ffd47a35a))
* **RabbitMQ Trigger Node:** Add exchange and routing key options ([#7547](https://github.com/n8n-io/n8n/issues/7547)) ([5aee2b7](https://github.com/n8n-io/n8n/commit/5aee2b768f7743c6508c518bab35206577035380))
* **Telegram Node:** Add support for markdownv2 ([#7679](https://github.com/n8n-io/n8n/issues/7679)) ([819b3a7](https://github.com/n8n-io/n8n/commit/819b3a746a1cfbb785c97d0c681734211a599852))
* **Venafi TLS Protect Cloud Node:** Add region parameter to Venafi protect cloud ([#7689](https://github.com/n8n-io/n8n/issues/7689)) ([a08fca5](https://github.com/n8n-io/n8n/commit/a08fca51d928b7bfb7c0081287a38274048892bb))


### Performance Improvements

* **core:** Lazyload security audit reporters ([#7696](https://github.com/n8n-io/n8n/issues/7696)) ([b2ca050](https://github.com/n8n-io/n8n/commit/b2ca0500311d85742ef8abf8f9f0d1436e6d9ba1))



# [1.16.0](https://github.com/n8n-io/n8n/compare/n8n@1.15.1...n8n@1.16.0) (2023-11-08)


Expand Down
6 changes: 3 additions & 3 deletions cypress/e2e/12-canvas.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -390,20 +390,20 @@ describe('Canvas Node Manipulation and Navigation', () => {
);

WorkflowPage.actions.executeWorkflow();
cy.contains('Node not found').should('be.visible');
cy.contains('Unrecognized node type').should('be.visible');

WorkflowPage.getters
.canvasNodeByName(`${unknownNodeName} 1`)
.find('[data-test-id=delete-node-button]')
.click({ force: true });

WorkflowPage.getters
WorkflowPage.getters
.canvasNodeByName(`${unknownNodeName} 2`)
.find('[data-test-id=delete-node-button]')
.click({ force: true });

WorkflowPage.actions.executeWorkflow();

cy.contains('Node not found').should('not.exist');
cy.contains('Unrecognized node type').should('not.exist');
});
});
4 changes: 2 additions & 2 deletions cypress/e2e/2-credentials.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ describe('Credentials', () => {
credentialsPage.getters.credentialCards().should('have.length', 1);
});

it('should create a new credential using Add Credential button', () => {
it.skip('should create a new credential using Add Credential button', () => {
credentialsPage.getters.createCredentialButton().click();

credentialsModal.getters.newCredentialModal().should('be.visible');
Expand All @@ -60,7 +60,7 @@ describe('Credentials', () => {
credentialsPage.getters.credentialCards().should('have.length', 2);
});

it('should search credentials', () => {
it.skip('should search credentials', () => {
// Search by name
credentialsPage.actions.search('Notion');
credentialsPage.getters.credentialCards().should('have.length', 1);
Expand Down
16 changes: 16 additions & 0 deletions cypress/e2e/27-opt-in-trial-banner.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,20 @@ describe('BannerStack', { disableAutoLogin: true }, () => {

mainSidebar.actions.signout();
});

it('Should show admin button', () => {
cy.intercept('GET', '/rest/settings', (req) => {
req.on('response', (res) => {
res.send({
data: { ...res.body.data, deployment: { type: 'cloud' }, n8nMetadata: { userId: 1 } },
});
});
}).as('loadSettings');

cy.signin({ email: INSTANCE_OWNER.email, password: INSTANCE_OWNER.password });

cy.visit(workflowPage.url);

mainSidebar.getters.adminPanel().should('be.visible');
});
});
116 changes: 116 additions & 0 deletions cypress/e2e/32-node-io-filter.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import { WorkflowPage as WorkflowPageClass, NDV } from '../pages';

const workflowPage = new WorkflowPageClass();
const ndv = new NDV();

describe('Node IO Filter', () => {
beforeEach(() => {
workflowPage.actions.visit();
cy.createFixtureWorkflow('Node_IO_filter.json', `Node IO filter`);
workflowPage.actions.saveWorkflowOnButtonClick();
workflowPage.actions.executeWorkflow();
});

it('should filter pinned data', () => {
workflowPage.getters.canvasNodes().first().dblclick();
ndv.actions.close();
workflowPage.getters.canvasNodes().first().dblclick();
cy.wait(500);
ndv.getters.outputDataContainer().should('be.visible');
cy.document().trigger('keyup', { key: '/' });

const searchInput = ndv.getters.searchInput();

searchInput.filter(':focus').should('exist');
ndv.getters.pagination().find('li').should('have.length', 3);
cy.get('.highlight').should('not.exist');

searchInput.type('ar');
ndv.getters.pagination().find('li').should('have.length', 2);
cy.get('.highlight').its('length').should('be.gt', 0);

searchInput.type('i');
ndv.getters.pagination().should('not.exist');
cy.get('.highlight').its('length').should('be.gt', 0);
});

it.only('should filter input/output data separately', () => {
workflowPage.getters.canvasNodes().eq(1).dblclick();
cy.wait(500);
ndv.getters.outputDataContainer().should('be.visible');
ndv.getters.inputDataContainer().should('be.visible');
ndv.actions.switchInputMode('Table');
cy.document().trigger('keyup', { key: '/' });

ndv.getters.outputPanel().findChildByTestId('ndv-search').filter(':focus').should('not.exist');

let focusedInput = ndv.getters
.inputPanel()
.findChildByTestId('ndv-search')
.filter(':focus')
.should('exist');

const getInputPagination = () =>
ndv.getters.inputPanel().findChildByTestId('ndv-data-pagination');
const getInputCounter = () => ndv.getters.inputPanel().findChildByTestId('ndv-items-count');
const getOuputPagination = () =>
ndv.getters.outputPanel().findChildByTestId('ndv-data-pagination');
const getOutputCounter = () => ndv.getters.outputPanel().findChildByTestId('ndv-items-count');

getInputPagination().find('li').should('have.length', 3);
getInputCounter().contains('21 items').should('exist');
getOuputPagination().find('li').should('have.length', 3);
getOutputCounter().contains('21 items').should('exist');
focusedInput.type('ar');

getInputPagination().find('li').should('have.length', 2);
getInputCounter().should('contain', '14 of 21 items');
getOuputPagination().find('li').should('have.length', 3);
getOutputCounter().should('contain', '21 items');
focusedInput.type('i');

getInputPagination().should('not.exist');
getInputCounter().should('contain', '8 of 21 items');
getOuputPagination().find('li').should('have.length', 3);
getOutputCounter().should('contain', '21 items');

focusedInput.clear();
getInputPagination().find('li').should('have.length', 3);
getInputCounter().contains('21 items').should('exist');
getOuputPagination().find('li').should('have.length', 3);
getOutputCounter().contains('21 items').should('exist');

ndv.getters.outputDataContainer().trigger('mouseover');
cy.document().trigger('keyup', { key: '/' });
ndv.getters.inputPanel().findChildByTestId('ndv-search').filter(':focus').should('not.exist');

focusedInput = ndv.getters
.outputPanel()
.findChildByTestId('ndv-search')
.filter(':focus')
.should('exist');

getInputPagination().find('li').should('have.length', 3);
getInputCounter().contains('21 items').should('exist');
getOuputPagination().find('li').should('have.length', 3);
getOutputCounter().contains('21 items').should('exist');
focusedInput.type('ar');

getInputPagination().find('li').should('have.length', 3);
getInputCounter().contains('21 items').should('exist');
getOuputPagination().find('li').should('have.length', 2);
getOutputCounter().should('contain', '14 of 21 items');
focusedInput.type('i');

getInputPagination().find('li').should('have.length', 3);
getInputCounter().contains('21 items').should('exist');
getOuputPagination().should('not.exist');
getOutputCounter().should('contain', '8 of 21 items');

focusedInput.clear();
getInputPagination().find('li').should('have.length', 3);
getInputCounter().contains('21 items').should('exist');
getOuputPagination().find('li').should('have.length', 3);
getOutputCounter().contains('21 items').should('exist');
});
});
2 changes: 1 addition & 1 deletion cypress/e2e/5-ndv.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ describe('NDV', () => {
});

it('should not retrieve remote options when a parameter value changes', () => {
cy.intercept('/rest/node-parameter-options?**', cy.spy().as('fetchParameterOptions'));
cy.intercept('/rest/dynamic-node-parameters/options?**', cy.spy().as('fetchParameterOptions'));
workflowPage.actions.addInitialNodeToCanvas('E2e Test', { action: 'Remote Options' });
// Type something into the field
ndv.actions.typeIntoParameterInput('otherField', 'test');
Expand Down
Loading

0 comments on commit 4a2f4f9

Please sign in to comment.