Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ workflows:
requires:
- test-node-v6
- test-node-v8
- test-image:
requires:
- docker-build-and-push

version: 2
jobs:
Expand Down Expand Up @@ -91,6 +94,17 @@ jobs:
docker:
- image: circleci/node:8.11-stretch-browsers

test-image:
docker:
- image: quay.io/plotly/image-exporter:$CIRCLE_SHA1
steps:
- checkout
- run:
name: Run image test
command: ./.circleci/test-image.sh
- store_artifacts:
path: build/

docker-build-and-push:
docker:
- image: circleci/node:8.11-stretch-browsers
Expand Down Expand Up @@ -126,6 +140,9 @@ jobs:
docker login -u $DOCKER_USER -p $DOCKER_PASS quay.io
docker push quay.io/plotly/image-exporter:$CIRCLE_SHA1

docker tag quay.io/plotly/image-exporter:$CIRCLE_SHA1 quay.io/plotly/orca:$CIRCLE_SHA1
docker push quay.io/plotly/orca:$CIRCLE_SHA1

# Is this a "version" commit? e.g. from `npm version`
# inspired by: https://discuss.circleci.com/t/git-tag-deploys-in-2-0/9493/4
if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; then
Expand Down
10 changes: 10 additions & 0 deletions .circleci/test-image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash

# override CircleCi's default run settings,
# so that we run all tests and do not exit early
# on test failures.
set +e
set +o pipefail

./test/image/render_mocks_cli build/test_images
./test/image/compare_images test/image/baselines build/test_images build/test_images_diff
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ coverage
deployment/*.retry

/yarn-error.log

test/image/build
test/image/diff
29 changes: 24 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,26 @@ $ npm install -g [email protected] orca

which makes the `orca` executable available in your path.

### Method 3: Standalone binaries
### Method 3: Docker

```
$ docker pull quay.io/plotly/orca
```

#### Usage

If no arguments are specified, it starts an Orca server on port 9091.
You can publish the port to the outside world the usual way:
```
$ docker run -d -p 9091:9091 quay.io/plotly/orca
```
If the first argument is `graph`,
it executes the command line application `orca graph`:
```
$ docker run -i quay.io/plotly/orca graph --help
```

### Method 4: Standalone binaries

Alternatively, you can download the standalone Orca binaries corresponding to
your operating system from the
Expand Down Expand Up @@ -179,7 +198,7 @@ $ orca graph https://plot.ly/~empet/14324.json --format svg

generates an SVG from a plotly.js JSON hosted on [plot.ly](https://plot.ly/).

When running
When running

To print info about the supported arguments, run:

Expand Down Expand Up @@ -323,9 +342,9 @@ See
You can also [contact us](https://plot.ly/products/consulting-and-oem/) if you
would like a specific feature added.

| Tests and Linux builds | Mac OS build | Windows build |
| ---------------------- | ------------ | ------------- |
| [![CircleCI](https://circleci.com/gh/plotly/orca.svg?style=svg)](https://circleci.com/gh/plotly/orca) | [![Build Status](https://travis-ci.org/plotly/orca.svg?branch=master)](https://travis-ci.org/plotly/orca) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/plotly/orca?svg=true)](https://ci.appveyor.com/project/AppVeyorDashAdmin/image-exporter) |
| Tests and Linux builds | Mac OS build | Windows build | Docker build |
| --- | --- | --- | --- |
| [![CircleCI](https://circleci.com/gh/plotly/orca.svg?style=svg)](https://circleci.com/gh/plotly/orca) | [![Build Status](https://travis-ci.org/plotly/orca.svg?branch=master)](https://travis-ci.org/plotly/orca) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/plotly/orca?svg=true)](https://ci.appveyor.com/project/AppVeyorDashAdmin/image-exporter) | [![Docker Repository on Quay](https://quay.io/repository/plotly/orca/status "Docker Repository on Quay")](https://quay.io/repository/plotly/orca) |


## License
Expand Down
17 changes: 12 additions & 5 deletions deployment/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,8 @@ RUN apt-get update -y && \
####################
# Download mathjax (same version as plotly.js extras/)

RUN apt-get update -y && apt-get install -y subversion && \
rm -rf /var/lib/apt/lists/* && apt-get clean && \
svn checkout https://github.com/plotly/plotly.js.git/trunk/dist/extras/mathjax && \
apt-get --auto-remove -y remove subversion
RUN curl -L https://github.com/plotly/plotly.js/archive/master.tar.gz \
| tar -xvzf - --strip-components=3 plotly.js-master/dist/extras/mathjax

####################
# Copy and set up Orca
Expand Down Expand Up @@ -124,10 +122,19 @@ COPY deployment/preferences.xml /root/.config/inkscape/

RUN wget https://raw.githubusercontent.com/plotly/plotly.js/master/dist/plotly-geo-assets.js -O /plotly-geo-assets.js

####################
# Configure ImageMagick policy

COPY deployment/ImageMagickPolicy.xml /etc/ImageMagick-6/policy.xml

####################
# Add entrypoint script
COPY deployment/entrypoint.sh /
# Add server script
COPY deployment/run_server /
# Symlink to entrypoint
RUN ln -s /entrypoint.sh /usr/bin/orca

EXPOSE 9091
ENTRYPOINT ["/run_server"]
ENTRYPOINT ["/entrypoint.sh"]
CMD ["--mathjax", "/mathjax/MathJax.js", "--topojson", "/plotly-geo-assets.js"]
82 changes: 82 additions & 0 deletions deployment/ImageMagickPolicy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
<!ELEMENT policy (#PCDATA)>
<!ATTLIST policy domain (delegate|coder|filter|path|resource) #IMPLIED>
<!ATTLIST policy name CDATA #IMPLIED>
<!ATTLIST policy rights CDATA #IMPLIED>
<!ATTLIST policy pattern CDATA #IMPLIED>
<!ATTLIST policy value CDATA #IMPLIED>
]>
<!--
Configure ImageMagick policies.

Domains include system, delegate, coder, filter, path, or resource.

Rights include none, read, write, and execute. Use | to combine them,
for example: "read | write" to permit read from, or write to, a path.

Use a glob expression as a pattern.

Suppose we do not want users to process MPEG video images:

<policy domain="delegate" rights="none" pattern="mpeg:decode" />

Here we do not want users reading images from HTTP:

<policy domain="coder" rights="none" pattern="HTTP" />

Lets prevent users from executing any image filters:

<policy domain="filter" rights="none" pattern="*" />

The /repository file system is restricted to read only. We use a glob
expression to match all paths that start with /repository:

<policy domain="path" rights="read" pattern="/repository/*" />

Any large image is cached to disk rather than memory:

<policy domain="resource" name="area" value="1GB"/>

Define arguments for the memory, map, area, and disk resources with
SI prefixes (.e.g 100MB). In addition, resource policies are maximums for
each instance of ImageMagick (e.g. policy memory limit 1GB, -limit 2GB
exceeds policy maximum so memory limit is 1GB).
-->
<policymap>
<!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
<!-- <policy domain="resource" name="memory" value="2GiB"/> -->
<!-- <policy domain="resource" name="map" value="4GiB"/> -->
<!-- <policy domain="resource" name="area" value="1GB"/> -->
<!-- <policy domain="resource" name="disk" value="16EB"/> -->
<!-- <policy domain="resource" name="file" value="768"/> -->
<!-- <policy domain="resource" name="thread" value="4"/> -->
<!-- <policy domain="resource" name="throttle" value="0"/> -->
<!-- <policy domain="resource" name="time" value="3600"/> -->
<!-- <policy domain="system" name="precision" value="6"/> -->
<!-- <policy domain="cache" name="shared-secret" value="passphrase"/> -->

<policy domain="path" rights="none" pattern="@*" />
<!--
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
<policy domain="coder" rights="none" pattern="TEXT" />
<policy domain="coder" rights="none" pattern="SHOW" />
<policy domain="coder" rights="none" pattern="WIN" />
<policy domain="coder" rights="none" pattern="PLT" />
-->

<!-- disable ghostscript format types -->
<!--
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
-->
<policy domain="coder" rights="read|write" pattern="*" />

</policymap>
10 changes: 10 additions & 0 deletions deployment/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env bash

if [[ $1 == "--help" || $1 == "--version" || $1 == "graph" ]]; then
xvfb-run --server-args "-screen 0 640x480x24" -a /var/www/image-exporter/bin/orca.js "$@"
elif [[ $1 == "serve" ]]; then
shift 1 # Remove argument "serve" since it is assumed in the following
/run_server "$@"
else # By default, run the server
/run_server "$@"
fi
11 changes: 11 additions & 0 deletions deployment/orca
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env bash

DOCKER_IMAGE=quay.io/plotly/orca

if [[ $1 == "--help" || $1 == "--version" || $1 == "graph" || $1 == "serve" ]]; then
docker run --net=host -it \
-v "$(pwd)":"$(pwd)" -w "$(pwd)" \
"$DOCKER_IMAGE" "$@"
else
echo "Unrecognized orca command. Run \`$0 --help\` for more info"
fi
6 changes: 3 additions & 3 deletions deployment/run_server
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ BUILD_DIR=/var/www/image-exporter/build
if [[ -n "${PLOTLY_JS_SRC}" ]]; then
# Fetch plotly js bundle and save it locally:
mkdir -p $BUILD_DIR
wget --retry-connrefused --no-check-certificate -O $BUILD_DIR/plotly-bundle.js $PLOTLY_JS_SRC
wget --retry-connrefused --no-check-certificate -O $BUILD_DIR/plotly-bundle.js "$PLOTLY_JS_SRC"
PLOTLYJS_ARG="--plotlyJS $BUILD_DIR/plotly-bundle.js"
fi

Expand All @@ -37,13 +37,13 @@ pkill -9 Xvfb
pkill -9 node
pkill -9 electron

xvfb-run --auto-servernum --server-args '-screen 0 640x480x24' ./bin/orca.js serve $REQUEST_LIMIT --safe-mode --verbose $PLOTLYJS_ARG $ORCA_IGNORECERTERRORS_ARG $@ &
xvfb-run --auto-servernum --server-args '-screen 0 640x480x24' /var/www/image-exporter/bin/orca.js serve $REQUEST_LIMIT --safe-mode --verbose $PLOTLYJS_ARG $ORCA_IGNORECERTERRORS_ARG $@ &
echo \$! > \$PIDFILE

EOF

chmod 755 /usr/local/bin/xvfb_wrapper

/usr/local/bin/xvfb_wrapper start
/usr/local/bin/xvfb_wrapper

/opt/monit/bin/monit -c /etc/monitrc
Binary file added test/image/baselines/29.emf
Binary file not shown.
Loading