#90 build app.js outside of main Docker image
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -9,3 +9,6 @@ npm-debug.log*
|
|||||||
.tox/
|
.tox/
|
||||||
*.egg*
|
*.egg*
|
||||||
dist/
|
dist/
|
||||||
|
scm-source.json
|
||||||
|
.cache/
|
||||||
|
.coverage
|
||||||
|
|||||||
13
.travis.yml
13
.travis.yml
@@ -1,7 +1,10 @@
|
|||||||
language: node_js
|
language: python
|
||||||
node_js:
|
python:
|
||||||
- '6'
|
- "3.5"
|
||||||
before_script:
|
install:
|
||||||
|
- pip install tox tox-travis coveralls
|
||||||
- npm install -g eslint
|
- npm install -g eslint
|
||||||
script:
|
script:
|
||||||
- cd app && eslint src
|
- tox
|
||||||
|
after_success:
|
||||||
|
- coveralls
|
||||||
|
|||||||
17
Dockerfile
17
Dockerfile
@@ -1,22 +1,21 @@
|
|||||||
FROM alpine:3.4
|
FROM alpine:3.5
|
||||||
|
MAINTAINER Henning Jacobs <henning@jacobs1.de>
|
||||||
|
|
||||||
RUN apk add --no-cache python3 python3-dev alpine-sdk zlib-dev libffi-dev openssl-dev nodejs ca-certificates && \
|
EXPOSE 8080
|
||||||
|
|
||||||
|
RUN apk add --no-cache python3 python3-dev gcc musl-dev zlib-dev libffi-dev openssl-dev ca-certificates && \
|
||||||
python3 -m ensurepip && \
|
python3 -m ensurepip && \
|
||||||
rm -r /usr/lib/python*/ensurepip && \
|
rm -r /usr/lib/python*/ensurepip && \
|
||||||
pip3 install --upgrade pip setuptools gevent && \
|
pip3 install --upgrade pip setuptools gevent && \
|
||||||
apk del python3-dev alpine-sdk zlib-dev libffi-dev openssl-dev && \
|
apk del python3-dev gcc musl-dev zlib-dev libffi-dev openssl-dev && \
|
||||||
rm -rf /var/cache/apk/* /root/.cache /tmp/*
|
rm -rf /var/cache/apk/* /root/.cache /tmp/*
|
||||||
|
|
||||||
EXPOSE 8080
|
COPY scm-source.json /
|
||||||
|
|
||||||
COPY requirements.txt /
|
COPY requirements.txt /
|
||||||
RUN pip3 install -r /requirements.txt
|
RUN pip3 install -r /requirements.txt
|
||||||
|
|
||||||
COPY kube_ops_view /
|
COPY kube_ops_view /kube_ops_view
|
||||||
COPY app /app
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
RUN npm install && npm run build
|
|
||||||
|
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
ENTRYPOINT ["/usr/bin/python3", "-m", "kube_ops_view"]
|
ENTRYPOINT ["/usr/bin/python3", "-m", "kube_ops_view"]
|
||||||
|
|||||||
34
Makefile
Normal file
34
Makefile
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
.PHONY: clean
|
||||||
|
|
||||||
|
IMAGE ?= hjacobs/kube-ops-view
|
||||||
|
TAG ?= latest
|
||||||
|
GITHEAD = $(shell git rev-parse --short HEAD)
|
||||||
|
GITURL = $(shell git config --get remote.origin.url)
|
||||||
|
GITSTATUS = $(shell git status --porcelain || echo "no changes")
|
||||||
|
|
||||||
|
default: docker
|
||||||
|
|
||||||
|
build: appjs docker
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -fr kube_ops_view/static/build
|
||||||
|
|
||||||
|
test:
|
||||||
|
tox
|
||||||
|
|
||||||
|
appjs:
|
||||||
|
docker run -it -u $$(id -u) -v $$(pwd):/workdir -w /workdir/app node:7.4-alpine npm install
|
||||||
|
docker run -it -u $$(id -u) -v $$(pwd):/workdir -w /workdir/app node:7.4-alpine npm run build
|
||||||
|
|
||||||
|
docker: appjs scm-source.json
|
||||||
|
docker build -t "$(IMAGE):$(TAG)" .
|
||||||
|
|
||||||
|
push: docker
|
||||||
|
docker push "$(IMAGE):$(TAG)"
|
||||||
|
|
||||||
|
mock:
|
||||||
|
docker run -it -p 8080:8080 -e MOCK=true "$(IMAGE):$(TAG)"
|
||||||
|
|
||||||
|
scm-source.json: .git
|
||||||
|
@echo '{"url": "$(GITURL)", "revision": "$(GITHEAD)", "author": "$(USER)", "status": "$(GITSTATUS)"}' > scm-source.json
|
||||||
|
|
||||||
10
README.rst
10
README.rst
@@ -83,6 +83,16 @@ You can also run the latest Docker image directly:
|
|||||||
$ docker run -it -p 8080:8080 -e MOCK=true hjacobs/kube-ops-view
|
$ docker run -it -p 8080:8080 -e MOCK=true hjacobs/kube-ops-view
|
||||||
|
|
||||||
|
|
||||||
|
Building
|
||||||
|
========
|
||||||
|
|
||||||
|
The provided ``Makefile`` will generate a Docker image by default:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ make
|
||||||
|
|
||||||
|
|
||||||
Multiple Clusters
|
Multiple Clusters
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
|||||||
34
setup.py
34
setup.py
@@ -1,11 +1,41 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
from setuptools import find_packages, setup
|
from setuptools import find_packages, setup
|
||||||
|
from setuptools.command.test import test as TestCommand
|
||||||
|
|
||||||
|
|
||||||
|
class PyTest(TestCommand):
|
||||||
|
|
||||||
|
user_options = [('cov-html=', None, 'Generate junit html report')]
|
||||||
|
|
||||||
|
def initialize_options(self):
|
||||||
|
TestCommand.initialize_options(self)
|
||||||
|
self.cov = None
|
||||||
|
self.pytest_args = ['--cov', 'kube_ops_view', '--cov-report', 'term-missing', '-v']
|
||||||
|
self.cov_html = False
|
||||||
|
|
||||||
|
def finalize_options(self):
|
||||||
|
TestCommand.finalize_options(self)
|
||||||
|
if self.cov_html:
|
||||||
|
self.pytest_args.extend(['--cov-report', 'html'])
|
||||||
|
self.pytest_args.extend(['tests'])
|
||||||
|
|
||||||
|
def run_tests(self):
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
errno = pytest.main(self.pytest_args)
|
||||||
|
sys.exit(errno)
|
||||||
|
|
||||||
|
|
||||||
def readme():
|
def readme():
|
||||||
return open('README.rst', encoding='utf-8').read()
|
return open('README.rst', encoding='utf-8').read()
|
||||||
|
|
||||||
|
|
||||||
|
tests_require = [
|
||||||
|
'pytest',
|
||||||
|
'pytest-cov'
|
||||||
|
]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='kube-ops-view',
|
name='kube-ops-view',
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
@@ -16,6 +46,10 @@ setup(
|
|||||||
url='https://github.com/hjacobs/kube-ops-view',
|
url='https://github.com/hjacobs/kube-ops-view',
|
||||||
keywords='kubernetes operations dashboard view k8s',
|
keywords='kubernetes operations dashboard view k8s',
|
||||||
license='GNU General Public License v3 (GPLv3)',
|
license='GNU General Public License v3 (GPLv3)',
|
||||||
|
tests_require=tests_require,
|
||||||
|
extras_require={'tests': tests_require},
|
||||||
|
cmdclass={'test': PyTest},
|
||||||
|
test_suite='tests',
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Development Status :: 3 - Alpha',
|
'Development Status :: 3 - Alpha',
|
||||||
'Intended Audience :: Developers',
|
'Intended Audience :: Developers',
|
||||||
|
|||||||
5
tests/test_mock.py
Normal file
5
tests/test_mock.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from kube_ops_view.mock import get_mock_clusters
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_mock_clusters():
|
||||||
|
get_mock_clusters()
|
||||||
17
tox.ini
17
tox.ini
@@ -1,12 +1,23 @@
|
|||||||
[tox]
|
[tox]
|
||||||
envlist=flake8
|
envlist=py35,flake8,eslint
|
||||||
|
|
||||||
[tox:travis]
|
[tox:travis]
|
||||||
3.5=flake8
|
3.5=py35,flake8,eslint
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
deps=pytest
|
||||||
|
commands=
|
||||||
|
pip install -r requirements.txt
|
||||||
|
python setup.py test
|
||||||
|
|
||||||
[testenv:flake8]
|
[testenv:flake8]
|
||||||
deps=flake8
|
deps=flake8
|
||||||
commands=flake8
|
commands=python setup.py flake8
|
||||||
|
|
||||||
|
[testenv:eslint]
|
||||||
|
whitelist_externals=eslint
|
||||||
|
changedir=app
|
||||||
|
commands=eslint src
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
max-line-length=160
|
max-line-length=160
|
||||||
|
|||||||
Reference in New Issue
Block a user