mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
🔀 Merge branch 'master' into oauth-support
This commit is contained in:
commit
ce3bf5ed2e
|
@ -8,9 +8,16 @@ fi
|
||||||
|
|
||||||
if [ "$#" -gt 0 ]; then
|
if [ "$#" -gt 0 ]; then
|
||||||
# Got started with arguments
|
# Got started with arguments
|
||||||
shift
|
COMMAND=$1;
|
||||||
exec su-exec node ./packages/cli/bin/n8n "$@"
|
|
||||||
|
if [[ "$COMMAND" == "n8n" ]]; then
|
||||||
|
shift
|
||||||
|
exec su-exec node ./packages/cli/bin/n8n "$@"
|
||||||
|
else
|
||||||
|
exec su-exec node "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
# Got started without arguments
|
# Got started without arguments
|
||||||
exec su-exec node ./packages/cli/bin/n8n
|
exec su-exec node ./packages/cli/bin/n8n
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -17,6 +17,7 @@ n8n is a free and open [fair-code](http://faircode.io) licensed node based Workf
|
||||||
- [Securing n8n](#securing-n8n)
|
- [Securing n8n](#securing-n8n)
|
||||||
- [Persist data](#persist-data)
|
- [Persist data](#persist-data)
|
||||||
- [Passing Sensitive Data via File](#passing-sensitive-data-via-file)
|
- [Passing Sensitive Data via File](#passing-sensitive-data-via-file)
|
||||||
|
- [Updating a Running docker-compose Instance](#updating-a-running-docker-compose-instance)
|
||||||
- [Example Setup with Lets Encrypt](#example-setup-with-lets-encrypt)
|
- [Example Setup with Lets Encrypt](#example-setup-with-lets-encrypt)
|
||||||
- [What does n8n mean and how do you pronounce it](#what-does-n8n-mean-and-how-do-you-pronounce-it)
|
- [What does n8n mean and how do you pronounce it](#what-does-n8n-mean-and-how-do-you-pronounce-it)
|
||||||
- [Support](#support)
|
- [Support](#support)
|
||||||
|
@ -226,6 +227,18 @@ The following environment variables support file input:
|
||||||
A basic step by step example setup of n8n with docker-compose and Lets Encrypt is available on the
|
A basic step by step example setup of n8n with docker-compose and Lets Encrypt is available on the
|
||||||
[Server Setup](https://docs.n8n.io/#/server-setup) page.
|
[Server Setup](https://docs.n8n.io/#/server-setup) page.
|
||||||
|
|
||||||
|
## Updating a running docker-compose instance
|
||||||
|
|
||||||
|
```
|
||||||
|
# Pull down the latest version from dockerhub
|
||||||
|
docker pull n8nio/n8n
|
||||||
|
# Stop current setup
|
||||||
|
sudo docker-compose stop
|
||||||
|
# Delete it (will only delete the docker-containers, data is stored separately)
|
||||||
|
sudo docker-compose rm
|
||||||
|
# Then start it again
|
||||||
|
sudo docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
## Setting Timezone
|
## Setting Timezone
|
||||||
|
|
||||||
|
|
|
@ -432,6 +432,80 @@ export class EditImage implements INodeType {
|
||||||
},
|
},
|
||||||
description: 'The color to use for the background when image gets rotated by anything which is not a multiple of 90..',
|
description: 'The color to use for the background when image gets rotated by anything which is not a multiple of 90..',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
displayName: 'Options',
|
||||||
|
name: 'options',
|
||||||
|
type: 'collection',
|
||||||
|
placeholder: 'Add Option',
|
||||||
|
default: {},
|
||||||
|
displayOptions: {
|
||||||
|
hide: {
|
||||||
|
operation: [
|
||||||
|
'information',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
displayName: 'File Name',
|
||||||
|
name: 'fileName',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
description: 'File name to set in binary data.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Format',
|
||||||
|
name: 'format',
|
||||||
|
type: 'options',
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: 'bmp',
|
||||||
|
value: 'bmp',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'gif',
|
||||||
|
value: 'gif',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'jpeg',
|
||||||
|
value: 'jpeg',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'png',
|
||||||
|
value: 'png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'tiff',
|
||||||
|
value: 'tiff',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default: 'jpeg',
|
||||||
|
description: 'Set the output image format.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Quality',
|
||||||
|
name: 'quality',
|
||||||
|
type: 'number',
|
||||||
|
typeOptions: {
|
||||||
|
minValue: 0,
|
||||||
|
maxValue: 100,
|
||||||
|
},
|
||||||
|
default: 100,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
format: [
|
||||||
|
'jpeg',
|
||||||
|
'png',
|
||||||
|
'tiff',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: 'Sets the jpeg|png|tiff compression level from 0 to 100 (best).',
|
||||||
|
},
|
||||||
|
|
||||||
|
],
|
||||||
|
},
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -442,6 +516,8 @@ export class EditImage implements INodeType {
|
||||||
const operation = this.getNodeParameter('operation', 0) as string;
|
const operation = this.getNodeParameter('operation', 0) as string;
|
||||||
const dataPropertyName = this.getNodeParameter('dataPropertyName') as string;
|
const dataPropertyName = this.getNodeParameter('dataPropertyName') as string;
|
||||||
|
|
||||||
|
const options = this.getNodeParameter('options', {}) as IDataObject;
|
||||||
|
|
||||||
// TODO: Later should make so that it sends directly a valid buffer and the buffer.from stuff is not needed anymore
|
// TODO: Later should make so that it sends directly a valid buffer and the buffer.from stuff is not needed anymore
|
||||||
if (item.binary === undefined) {
|
if (item.binary === undefined) {
|
||||||
return item;
|
return item;
|
||||||
|
@ -550,6 +626,24 @@ export class EditImage implements INodeType {
|
||||||
Object.assign(newItem.binary, item.binary);
|
Object.assign(newItem.binary, item.binary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.quality !== undefined) {
|
||||||
|
gmInstance = gmInstance.quality(options.quality as number);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.format !== undefined) {
|
||||||
|
gmInstance = gmInstance.setFormat(options.format as string);
|
||||||
|
newItem.binary![dataPropertyName as string].fileExtension = options.format as string;
|
||||||
|
newItem.binary![dataPropertyName as string].mimeType = `image/${options.format}`;
|
||||||
|
const fileName = newItem.binary![dataPropertyName as string].fileName;
|
||||||
|
if (fileName && fileName.includes('.')) {
|
||||||
|
newItem.binary![dataPropertyName as string].fileName = fileName.split('.').slice(0, -1).join('.') + '.' + options.format;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.fileName !== undefined) {
|
||||||
|
newItem.binary![dataPropertyName as string].fileName = options.fileName as string;
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise<INodeExecutionData>((resolve, reject) => {
|
return new Promise<INodeExecutionData>((resolve, reject) => {
|
||||||
gmInstance
|
gmInstance
|
||||||
.toBuffer((error: Error | null, buffer: Buffer) => {
|
.toBuffer((error: Error | null, buffer: Buffer) => {
|
||||||
|
|
|
@ -40,7 +40,7 @@ export class TrelloTrigger implements INodeType {
|
||||||
webhooks: [
|
webhooks: [
|
||||||
{
|
{
|
||||||
name: 'setup',
|
name: 'setup',
|
||||||
httpMethod: 'GET',
|
httpMethod: 'HEAD',
|
||||||
responseMode: 'onReceived',
|
responseMode: 'onReceived',
|
||||||
path: 'webhook',
|
path: 'webhook',
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue