Merge pull request #429 from jc21/develop

v2.3.0
This commit is contained in:
jc21 2020-05-28 17:06:19 +10:00 committed by GitHub
commit 546f862236
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 223 additions and 148 deletions

2
.gitignore vendored
View File

@ -2,4 +2,4 @@
.idea .idea
._* ._*
.vscode .vscode
certbot-help.txt

View File

@ -1 +1 @@
2.2.4 2.3.0

101
Jenkinsfile vendored
View File

@ -5,6 +5,7 @@ pipeline {
options { options {
buildDiscarder(logRotator(numToKeepStr: '5')) buildDiscarder(logRotator(numToKeepStr: '5'))
disableConcurrentBuilds() disableConcurrentBuilds()
ansiColor('xterm')
} }
environment { environment {
IMAGE = "nginx-proxy-manager" IMAGE = "nginx-proxy-manager"
@ -55,50 +56,44 @@ pipeline {
} }
stage('Frontend') { stage('Frontend') {
steps { steps {
ansiColor('xterm') { sh './scripts/frontend-build'
sh './scripts/frontend-build'
}
} }
} }
stage('Backend') { stage('Backend') {
steps { steps {
ansiColor('xterm') { echo 'Checking Syntax ...'
echo 'Checking Syntax ...' // See: https://github.com/yarnpkg/yarn/issues/3254
// See: https://github.com/yarnpkg/yarn/issues/3254 sh '''docker run --rm \\
sh '''docker run --rm \\ -v "$(pwd)/backend:/app" \\
-v "$(pwd)/backend:/app" \\ -w /app \\
-w /app \\ node:latest \\
node:latest \\ sh -c "yarn install && yarn eslint . && rm -rf node_modules"
sh -c "yarn install && yarn eslint . && rm -rf node_modules" '''
'''
echo 'Docker Build ...' echo 'Docker Build ...'
sh '''docker build --pull --no-cache --squash --compress \\ sh '''docker build --pull --no-cache --squash --compress \\
-t "${IMAGE}:ci-${BUILD_NUMBER}" \\ -t "${IMAGE}:ci-${BUILD_NUMBER}" \\
-f docker/Dockerfile \\ -f docker/Dockerfile \\
--build-arg TARGETPLATFORM=linux/amd64 \\ --build-arg TARGETPLATFORM=linux/amd64 \\
--build-arg BUILDPLATFORM=linux/amd64 \\ --build-arg BUILDPLATFORM=linux/amd64 \\
--build-arg BUILD_VERSION="${BUILD_VERSION}" \\ --build-arg BUILD_VERSION="${BUILD_VERSION}" \\
--build-arg BUILD_COMMIT="${BUILD_COMMIT}" \\ --build-arg BUILD_COMMIT="${BUILD_COMMIT}" \\
--build-arg BUILD_DATE="$(date '+%Y-%m-%d %T %Z')" \\ --build-arg BUILD_DATE="$(date '+%Y-%m-%d %T %Z')" \\
. .
''' '''
}
} }
} }
stage('Test') { stage('Test') {
steps { steps {
ansiColor('xterm') { // Bring up a stack
// Bring up a stack sh 'docker-compose up -d fullstack'
sh 'docker-compose up -d fullstack' sh './scripts/wait-healthy $(docker-compose ps -q fullstack) 120'
sh './scripts/wait-healthy $(docker-compose ps -q fullstack) 120'
// Run tests // Run tests
sh 'rm -rf test/results' sh 'rm -rf test/results'
sh 'docker-compose up cypress' sh 'docker-compose up cypress'
// Get results // Get results
sh 'docker cp -L "$(docker-compose ps -q cypress):/results" test/' sh 'docker cp -L "$(docker-compose ps -q cypress):/results" test/'
}
} }
post { post {
always { always {
@ -121,18 +116,16 @@ pipeline {
} }
} }
steps { steps {
ansiColor('xterm') { dir(path: 'docs') {
dir(path: 'docs') { sh 'yarn install'
sh 'yarn install' sh 'yarn build'
sh 'yarn build'
}
dir(path: 'docs/.vuepress/dist') {
sh 'tar -czf ../../docs.tgz *'
}
archiveArtifacts(artifacts: 'docs/docs.tgz', allowEmptyArchive: false)
} }
dir(path: 'docs/.vuepress/dist') {
sh 'tar -czf ../../docs.tgz *'
}
archiveArtifacts(artifacts: 'docs/docs.tgz', allowEmptyArchive: false)
} }
} }
stage('MultiArch Build') { stage('MultiArch Build') {
@ -142,12 +135,10 @@ pipeline {
} }
} }
steps { steps {
ansiColor('xterm') { withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) { sh "docker login -u '${duser}' -p '${dpass}'"
sh "docker login -u '${duser}' -p '${dpass}'" // Buildx with push
// Buildx with push sh "./scripts/buildx --push ${BUILDX_PUSH_TAGS}"
sh "./scripts/buildx --push ${BUILDX_PUSH_TAGS}"
}
} }
} }
} }
@ -193,17 +184,15 @@ pipeline {
} }
} }
steps { steps {
ansiColor('xterm') { script {
script { def comment = pullRequest.comment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`")
def comment = pullRequest.comment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`")
}
} }
} }
} }
} }
post { post {
always { always {
sh 'docker-compose down --rmi all --remove-orphans --volumes -t 30' //sh 'docker-compose down --rmi all --remove-orphans --volumes -t 30'
sh 'echo Reverting ownership' sh 'echo Reverting ownership'
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} chown -R $(id -u):$(id -g) /data' sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} chown -R $(id -u):$(id -g) /data'
} }

143
README.md
View File

@ -1,16 +1,19 @@
<p align="center"> <p align="center">
<img src="https://nginxproxymanager.com/github.png"> <img src="https://nginxproxymanager.com/github.png">
<br><br> <br><br>
<img src="https://img.shields.io/badge/version-2.2.4-green.svg?style=for-the-badge"> <img src="https://img.shields.io/badge/version-2.3.0-green.svg?style=for-the-badge">
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager"> <a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge"> <img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
</a> </a>
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager"> <a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge"> <img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge">
</a> </a>
<a href="https://ci.nginxproxymanager.com/blue/organizations/jenkins/nginx-proxy-manager/branches/"> <a href="https://ci.nginxproxymanager.com/blue/organizations/jenkins/nginx-proxy-manager/branches/">
<img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fci.nginxproxymanager.com%2Fjob%2Fnginx-proxy-manager%2Fjob%2Fmaster&style=for-the-badge"> <img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fci.nginxproxymanager.com%2Fjob%2Fnginx-proxy-manager%2Fjob%2Fmaster&style=for-the-badge">
</a> </a>
<a href="https://gitter.im/nginx-proxy-manager/community">
<img alt="Gitter" src="https://img.shields.io/gitter/room/nginx-proxy-manager/community?style=for-the-badge">
</a>
</p> </p>
This project comes as a pre-built docker image that enables you to easily forward to your websites This project comes as a pre-built docker image that enables you to easily forward to your websites
@ -48,3 +51,119 @@ I won't go in to too much detail here but here are the basics for someone new to
2. Add port forwarding for port 80 and 443 to the server hosting this project 2. Add port forwarding for port 80 and 443 to the server hosting this project
3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns) 3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns)
4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services 4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services
## Contributors
Special thanks to the following contributors:
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center">
<a href="https://github.com/Subv">
<img src="https://avatars1.githubusercontent.com/u/357072?s=460&u=d8adcdc91d749ae53e177973ed9b6bb6c4c894a3&v=4" width="80px;" alt=""/>
<br /><sub><b>Sebastian Valle</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Indemnity83">
<img src="https://avatars3.githubusercontent.com/u/35218?s=460&u=7082004ff35138157c868d7d9c683ccebfce5968&v=4" width="80px;" alt=""/>
<br /><sub><b>Kyle Klaus</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/theraw">
<img src="https://avatars1.githubusercontent.com/u/32969774?s=460&u=6b359971e15685fb0359e6a8c065a399b40dc228&v=4" width="80px;" alt=""/>
<br /><sub><b>ƬHE ЯAW</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/spalger">
<img src="https://avatars2.githubusercontent.com/u/1329312?s=400&u=565223e38f1c052afb4c5dcca3fcf1c63ba17ae7&v=4" width="80px;" alt=""/>
<br /><sub><b>Spencer</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Xantios">
<img src="https://avatars3.githubusercontent.com/u/1507836?s=460&v=4" width="80px;" alt=""/>
<br /><sub><b>Xantios Krugor</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/dpanesso">
<img src="https://avatars2.githubusercontent.com/u/2687121?s=460&v=4" width="80px;" alt=""/>
<br /><sub><b>David Panesso</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/IronTooch">
<img src="https://avatars3.githubusercontent.com/u/27360514?s=460&u=69bf854a6647c55725f62ecb8d39249c6c0b2602&v=4" width="80px;" alt=""/>
<br /><sub><b>IronTooch</b></sub>
</a>
</td>
</tr>
<tr>
<td align="center">
<a href="https://github.com/damianog">
<img src="https://avatars1.githubusercontent.com/u/2786682?s=460&u=76c6136fae797abb76b951cd8a246dcaecaf21af&v=4" width="80px;" alt=""/>
<br /><sub><b>Damiano</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/tfmm">
<img src="https://avatars3.githubusercontent.com/u/6880538?s=460&u=ce0160821cc4aa802df8395200f2d4956a5bc541&v=4" width="80px;" alt=""/>
<br /><sub><b>Russ</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/margaale">
<img src="https://avatars3.githubusercontent.com/u/20794934?s=460&v=4" width="80px;" alt=""/>
<br /><sub><b>Marcelo Castagna</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Steven-Harris">
<img src="https://avatars2.githubusercontent.com/u/7720242?s=460&v=4" width="80px;" alt=""/>
<br /><sub><b>Steven Harris</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/jlesage">
<img src="https://avatars0.githubusercontent.com/u/1791123?s=460&v=4" width="80px;" alt=""/>
<br /><sub><b>Jocelyn Le Sage</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/cmer">
<img src="https://avatars0.githubusercontent.com/u/412?s=460&u=67dd8b2e3661bfd6f68ec1eaa5b9821bd8a321cd&v=4" width="80px;" alt=""/>
<br /><sub><b>Carl Mercier</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/the1ts">
<img src="https://avatars1.githubusercontent.com/u/84956?s=460&v=4" width="80px;" alt=""/>
<br /><sub><b>Paul Mansfield</b></sub>
</a>
</td>
</tr>
<tr>
<td align="center">
<a href="https://github.com/OhHeyAlan">
<img src="https://avatars0.githubusercontent.com/u/11955126?s=460&u=fbaa5a1a4f73ef8960132c703349bfd037fe2630&v=4" width="80px;" alt=""/>
<br /><sub><b>OhHeyAlan</b></sub>
</a>
</td>
</tr>
<tr>
<td align="center">
<a href="https://github.com/dogmatic69">
<img src="https://avatars2.githubusercontent.com/u/94674?s=460&u=ca7647de53145c6283b6373ade5dc94ba99347db&v=4" width="80px;" alt=""/>
<br /><sub><b>Carl Sutton</b></sub>
</a>
</td>
</tr>
</table>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->

View File

@ -71,7 +71,7 @@ const internalAccessList = {
// re-fetch with expansions // re-fetch with expansions
return internalAccessList.get(access, { return internalAccessList.get(access, {
id: data.id, id: data.id,
expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.clients'] expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.clients', 'proxy_hosts.access_list.items']
}, true /* <- skip masking */); }, true /* <- skip masking */);
}) })
.then((row) => { .then((row) => {
@ -216,7 +216,7 @@ const internalAccessList = {
// re-fetch with expansions // re-fetch with expansions
return internalAccessList.get(access, { return internalAccessList.get(access, {
id: data.id, id: data.id,
expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.clients'] expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.clients', 'proxy_hosts.access_list.items']
}, true /* <- skip masking */); }, true /* <- skip masking */);
}) })
.then((row) => { .then((row) => {
@ -254,7 +254,7 @@ const internalAccessList = {
.joinRaw('LEFT JOIN `proxy_host` ON `proxy_host`.`access_list_id` = `access_list`.`id` AND `proxy_host`.`is_deleted` = 0') .joinRaw('LEFT JOIN `proxy_host` ON `proxy_host`.`access_list_id` = `access_list`.`id` AND `proxy_host`.`is_deleted` = 0')
.where('access_list.is_deleted', 0) .where('access_list.is_deleted', 0)
.andWhere('access_list.id', data.id) .andWhere('access_list.id', data.id)
.allowEager('[owner,items,clients,proxy_hosts,proxy_hosts.access_list.clients]') .allowEager('[owner,items,clients,proxy_hosts,proxy_hosts.access_list.clients,proxy_hosts.access_list.items]')
.omit(['access_list.is_deleted']) .omit(['access_list.is_deleted'])
.first(); .first();

View File

@ -73,7 +73,7 @@ const internalProxyHost = {
// re-fetch with cert // re-fetch with cert
return internalProxyHost.get(access, { return internalProxyHost.get(access, {
id: row.id, id: row.id,
expand: ['certificate', 'owner', 'access_list.clients'] expand: ['certificate', 'owner', 'access_list.clients', 'access_list.items']
}); });
}) })
.then((row) => { .then((row) => {
@ -186,7 +186,7 @@ const internalProxyHost = {
.then(() => { .then(() => {
return internalProxyHost.get(access, { return internalProxyHost.get(access, {
id: data.id, id: data.id,
expand: ['owner', 'certificate', 'access_list.clients'] expand: ['owner', 'certificate', 'access_list.clients', 'access_list.items']
}) })
.then((row) => { .then((row) => {
// Configure nginx // Configure nginx
@ -219,7 +219,7 @@ const internalProxyHost = {
.query() .query()
.where('is_deleted', 0) .where('is_deleted', 0)
.andWhere('id', data.id) .andWhere('id', data.id)
.allowEager('[owner,access_list,access_list.clients,certificate]') .allowEager('[owner,access_list,access_list.clients,access_list.items,certificate]')
.first(); .first();
if (access_data.permission_visibility !== 'all') { if (access_data.permission_visibility !== 'all') {

View File

@ -23,9 +23,11 @@ server {
location / { location / {
{% if access_list_id > 0 %} {% if access_list_id > 0 %}
{% if access_list.items.length > 0 %}
# Authorization # Authorization
auth_basic "Authorization required"; auth_basic "Authorization required";
auth_basic_user_file /data/access/{{ access_list_id }}; auth_basic_user_file /data/access/{{ access_list_id }};
{% endif %}
# Access Rules # Access Rules
{% for client in access_list.clients %} {% for client in access_list.clients %}

View File

@ -16,7 +16,6 @@ ENV S6_FIX_ATTRS_HIDDEN=1
ENV NODE_ENV=production ENV NODE_ENV=production
RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \ RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \
&& rm -rf /etc/nginx \
&& apk update \ && apk update \
&& apk add python2 certbot jq \ && apk add python2 certbot jq \
&& rm -rf /var/cache/apk/* && rm -rf /var/cache/apk/*

View File

@ -6,7 +6,6 @@ ENV SUPPRESS_NO_CONFIG_WARNING=1
ENV S6_FIX_ATTRS_HIDDEN=1 ENV S6_FIX_ATTRS_HIDDEN=1
RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \ RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \
&& rm -rf /etc/nginx \
&& apk update \ && apk update \
&& apk add python2 certbot jq \ && apk add python2 certbot jq \
&& rm -rf /var/cache/apk/* && rm -rf /var/cache/apk/*

View File

@ -26,12 +26,15 @@ http {
tcp_nopush on; tcp_nopush on;
tcp_nodelay on; tcp_nodelay on;
client_body_temp_path /tmp/nginx/body 1 2; client_body_temp_path /tmp/nginx/body 1 2;
keepalive_timeout 65; keepalive_timeout 90s;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;
ssl_prefer_server_ciphers on; ssl_prefer_server_ciphers on;
gzip on; gzip on;
proxy_ignore_client_abort off; proxy_ignore_client_abort off;
client_max_body_size 2000m; client_max_body_size 2000m;
server_names_hash_bucket_size 64; server_names_hash_bucket_size 1024;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

View File

@ -16,5 +16,5 @@ alias h='cd ~;clear;'
echo -e -n '\E[1;34m' echo -e -n '\E[1;34m'
figlet -w 120 "NginxProxyManager" figlet -w 120 "NginxProxyManager"
echo -e "\E[1;36mVersion \E[1;32m${NPM_BUILD_VERSION:-2.0.0-dev}\E[1;36m (${NPM_BUILD_COMMIT:-dev}) ${NPM_BUILD_DATE:-0000-00-00}, Nginx \E[1;32m${NGINX_VERSION:-unknown}\E[1;36m, Alpine \E[1;32m${VERSION_ID:-unknown}\E[1;36m, Kernel \E[1;32m$(uname -r)\E[0m" echo -e "\E[1;36mVersion \E[1;32m${NPM_BUILD_VERSION:-2.0.0-dev} (${NPM_BUILD_COMMIT:-dev}) ${NPM_BUILD_DATE:-0000-00-00}\E[1;36m, OpenResty \E[1;32m${OPENRESTY_VERSION:-unknown}\E[1;36m, Alpine \E[1;32m${VERSION_ID:-unknown}\E[1;36m, Kernel \E[1;32m$(uname -r)\E[0m"
echo echo

17
scripts/.common.sh Normal file
View File

@ -0,0 +1,17 @@
#!/bin/bash
# Colors
BLUE='\E[1;34m'
CYAN='\E[1;36m'
GREEN='\E[1;32m'
RED='\E[1;31m'
RESET='\E[0m'
YELLOW='\E[1;33m'
export BLUE CYAN GREEN RED RESET YELLOW
# Docker Compose
COMPOSE_PROJECT_NAME="npmdev"
COMPOSE_FILE="docker/docker-compose.dev.yml"
export COMPOSE_FILE COMPOSE_PROJECT_NAME

View File

@ -1,10 +1,7 @@
#!/bin/bash #!/bin/bash
CYAN='\E[1;36m' DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
YELLOW='\E[1;33m' . "$DIR/.common.sh"
BLUE='\E[1;34m'
GREEN='\E[1;32m'
RESET='\E[0m'
echo -e "${BLUE} ${CYAN}Building docker multiarch: ${YELLOW}${*}${RESET}" echo -e "${BLUE} ${CYAN}Building docker multiarch: ${YELLOW}${*}${RESET}"

View File

@ -1,15 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"
CYAN='\E[1;36m'
BLUE='\E[1;34m'
RED='\E[1;31m'
RESET='\E[0m'
COMPOSE_PROJECT_NAME="npmdev"
COMPOSE_FILE="docker/docker-compose.dev.yml"
export COMPOSE_FILE COMPOSE_PROJECT_NAME
# Ensure docker-compose exists # Ensure docker-compose exists
# Make sure docker exists # Make sure docker exists

View File

@ -1,12 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"
CYAN='\E[1;36m'
BLUE='\E[1;34m'
RED='\E[1;31m'
GREEN='\E[1;32m'
RESET='\E[0m'
# Ensure docker-compose exists # Ensure docker-compose exists
if hash docker 2>/dev/null; then if hash docker 2>/dev/null; then

View File

@ -2,11 +2,8 @@
# Note: This script is designed to be run inside CI builds # Note: This script is designed to be run inside CI builds
CYAN='\E[1;36m' DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
YELLOW='\E[1;33m' . "$DIR/.common.sh"
BLUE='\E[1;34m'
GREEN='\E[1;32m'
RESET='\E[0m'
echo -e "${BLUE} ${CYAN}Uploading docs in: ${YELLOW}$1${RESET}" echo -e "${BLUE} ${CYAN}Uploading docs in: ${YELLOW}$1${RESET}"

View File

@ -1,12 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"
CYAN='\E[1;36m'
BLUE='\E[1;34m'
RED='\E[1;31m'
GREEN='\E[1;32m'
RESET='\E[0m'
DOCKER_IMAGE=jc21/alpine-nginx-full:node DOCKER_IMAGE=jc21/alpine-nginx-full:node

View File

@ -1,16 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"
CYAN='\E[1;36m'
BLUE='\E[1;34m'
YELLOW='\E[1;33m'
RED='\E[1;31m'
RESET='\E[0m'
COMPOSE_PROJECT_NAME="npmdev"
COMPOSE_FILE="docker/docker-compose.dev.yml"
export COMPOSE_FILE COMPOSE_PROJECT_NAME
# Ensure docker-compose exists # Ensure docker-compose exists
if hash docker-compose 2>/dev/null; then if hash docker-compose 2>/dev/null; then

View File

@ -1,15 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"
CYAN='\E[1;36m'
BLUE='\E[1;34m'
RED='\E[1;31m'
RESET='\E[0m'
COMPOSE_PROJECT_NAME="npmdev"
COMPOSE_FILE="docker/docker-compose.dev.yml"
export COMPOSE_FILE COMPOSE_PROJECT_NAME
# Ensure docker-compose exists # Ensure docker-compose exists
# Make sure docker exists # Make sure docker exists

View File

@ -1,15 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"
CYAN='\E[1;36m'
BLUE='\E[1;34m'
RED='\E[1;31m'
RESET='\E[0m'
COMPOSE_PROJECT_NAME="npmdev"
COMPOSE_FILE="docker/docker-compose.dev.yml"
export COMPOSE_FILE COMPOSE_PROJECT_NAME
# Ensure docker-compose exists # Ensure docker-compose exists
if hash docker-compose 2>/dev/null; then if hash docker-compose 2>/dev/null; then

View File

@ -1,11 +1,7 @@
#!/bin/bash #!/bin/bash
CYAN='\E[1;36m' DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
YELLOW='\E[1;33m' . "$DIR/.common.sh"
BLUE='\E[1;34m'
GREEN='\E[1;32m'
RED='\E[1;31m'
RESET='\E[0m'
if [ "$1" == "" ]; then if [ "$1" == "" ]; then
echo "Waits for a docker container to be healthy." echo "Waits for a docker container to be healthy."

View File

@ -1,4 +1,4 @@
FROM cypress/included:4.0.2 FROM cypress/included:4.6.0
COPY --chown=1000 ./test /test COPY --chown=1000 ./test /test

View File

@ -7,7 +7,7 @@
"@jc21/cypress-swagger-validation": "^0.0.5", "@jc21/cypress-swagger-validation": "^0.0.5",
"@jc21/restler": "^3.4.0", "@jc21/restler": "^3.4.0",
"chalk": "^3.0.0", "chalk": "^3.0.0",
"cypress": "^4.0.2", "cypress": "^4.6.0",
"cypress-plugin-retries": "^1.5.2", "cypress-plugin-retries": "^1.5.2",
"eslint": "^6.7.2", "eslint": "^6.7.2",
"eslint-plugin-align-assignments": "^1.1.2", "eslint-plugin-align-assignments": "^1.1.2",