Skip to content

Commit 338c399

Browse files
committed
merge main
2 parents 5e042c7 + e3b12fd commit 338c399

File tree

13 files changed

+1168
-4869
lines changed

13 files changed

+1168
-4869
lines changed

.github/workflows/ci.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,55 @@ jobs:
4545
- run: npm install -g solid-server-*.tgz
4646
# Run the Solid test-suite
4747
- run: bash test/surface/run-solid-test-suite.sh $BRANCH_NAME
48+
49+
# TODO: The pipeline should automate publication to npm, so that the docker build gets the correct version
50+
# This job will only dockerize solid-server@latest / solid-server@<tag-name> from npmjs.com!
51+
docker-hub:
52+
needs: build
53+
name: Publish to docker hub
54+
if: github.event_name != 'pull_request'
55+
runs-on: ubuntu-latest
56+
steps:
57+
58+
- uses: actions/checkout@v2
59+
60+
- uses: olegtarasov/get-tag@v2.1
61+
id: tagName
62+
with:
63+
tagRegex: "v?(?<version>.*)"
64+
65+
- name: Lint dockerfile
66+
working-directory: docker-image
67+
run: pwd && ls -lah && make lint
68+
69+
- name: Run tests
70+
working-directory: docker-image
71+
run: SOLID_SERVER_VERSION=${{ steps.tagName.outputs.version }} make test
72+
73+
- name: Set up QEMU
74+
uses: docker/setup-qemu-action@v1
75+
76+
- name: Set up Docker Buildx
77+
uses: docker/setup-buildx-action@v1
78+
79+
- name: Docker meta
80+
id: meta
81+
uses: docker/metadata-action@v3
82+
with:
83+
images: nodesolidserver/node-solid-server
84+
85+
- name: Login to DockerHub
86+
uses: docker/login-action@v1
87+
with:
88+
username: ${{ secrets.DOCKERHUB_USERNAME }}
89+
password: ${{ secrets.DOCKERHUB_TOKEN }}
90+
91+
- name: Build and push
92+
id: docker_build
93+
uses: docker/build-push-action@v2
94+
with:
95+
context: ./docker-image/src
96+
build-args: SOLID_SERVER_VERSION=${{ steps.tagName.outputs.version }}
97+
push: true
98+
tags: ${{ steps.meta.outputs.tags }}
99+
labels: ${{ steps.meta.outputs.labels }}

docker-image/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ test: ## run testinfra tests against the project
22
docker run --rm -t \
33
-v $(shell pwd):/project \
44
-v /var/run/docker.sock:/var/run/docker.sock:ro \
5+
-e SOLID_SERVER_VERSION="${SOLID_SERVER_VERSION}" \
56
aveltens/docker-testinfra
67

78
lint: ## run hadolint against the Dockerfile

docker-image/src/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
FROM node:10-alpine
22

3+
# hadolint ignore=DL3018
34
RUN apk add --no-cache openssl
45

56
ARG SOLID_SERVER_VERSION=latest

docker-image/src/hooks/build

Lines changed: 0 additions & 9 deletions
This file was deleted.

docker-image/test/__init__.py

Whitespace-only changes.

docker-image/test/conftest.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import docker
22
import pytest
3+
import os
4+
35

46
@pytest.fixture(scope="session")
57
def client():
68
return docker.from_env()
79

10+
811
@pytest.fixture(scope="session")
912
def image(client):
10-
img, _ = client.images.build(path='./src', dockerfile='Dockerfile')
11-
return img
13+
img, _ = client.images.build(path='./src', dockerfile='Dockerfile',
14+
buildargs={"SOLID_SERVER_VERSION": os.environ['SOLID_SERVER_VERSION']})
15+
return img

docker-image/test/test_non_accessible_key_cert.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# coding=utf-8
22
import docker
33
import pytest
4-
import time
54

65
import os
76

7+
from test.wait_for_container import wait_for_container
8+
89
testinfra_hosts = ['docker://test_container']
910

1011

@@ -21,8 +22,7 @@ def container(client, image):
2122
detach=True,
2223
tty=True
2324
)
24-
# give the solid process some seconds to create the directory structure before making assertions
25-
time.sleep(2)
25+
wait_for_container(container, "Finished: ERROR")
2626
yield container
2727
container.remove(force=True)
2828

docker-image/test/test_precondition_checks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# coding=utf-8
22
import docker
33
import pytest
4-
import time
4+
5+
from test.wait_for_container import wait_for_container
56

67
testinfra_hosts = ['docker://test_container']
78

@@ -23,8 +24,7 @@ def container(client, image):
2324
detach=True,
2425
tty=True
2526
)
26-
# give the solid process some seconds to create the directory structure before making assertions
27-
time.sleep(2)
27+
wait_for_container(container, "Finished: ERROR")
2828
yield container
2929
container.remove(force=True)
3030

docker-image/test/test_solid_default_config.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import docker
21
import pytest
3-
import time
2+
3+
from test.wait_for_container import wait_for_container
44

55
testinfra_hosts = ['docker://test_container']
66

@@ -12,8 +12,7 @@ def container(client, image):
1212
detach=True,
1313
tty=True
1414
)
15-
# give the solid process some seconds to create the directory structure before making assertions
16-
time.sleep(2)
15+
wait_for_container(container)
1716
yield container
1817
container.remove(force=True)
1918

docker-image/test/test_volumes.py

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,55 @@
11
import docker
22
import pytest
3-
import time
3+
4+
from test.wait_for_container import wait_for_container
45

56
testinfra_hosts = ['docker://test_container']
67

78
@pytest.fixture(scope="module", autouse=True)
89
def solid_server(client, image):
9-
container = client.containers.run(
10-
image.id,
11-
name="solid_server",
12-
detach=True,
13-
tty=True
14-
)
15-
# give the solid process some seconds to create the directory structure before making assertions
16-
time.sleep(2)
17-
yield container
18-
container.remove(force=True)
10+
container = client.containers.run(
11+
image.id,
12+
name="solid_server",
13+
detach=True,
14+
tty=True
15+
)
16+
wait_for_container(container)
17+
yield container
18+
container.remove(force=True)
19+
1920

2021
@pytest.fixture(scope="module", autouse=True)
2122
def container(client, solid_server):
22-
container = client.containers.run(
23-
'alpine',
24-
name="test_container",
25-
detach=True,
26-
tty=True,
27-
volumes_from=solid_server.id
28-
)
29-
# give the solid process some seconds to create the directory structure before making assertions
30-
time.sleep(2)
31-
yield container
32-
container.remove(force=True)
23+
container = client.containers.run(
24+
'alpine',
25+
name="test_container",
26+
detach=True,
27+
tty=True,
28+
volumes_from=solid_server.id
29+
)
30+
yield container
31+
container.remove(force=True)
32+
3333

3434
def test_solid_data_dir_is_mounted(host):
35-
solid_data = host.file("/opt/solid/data/")
36-
assert solid_data.exists
37-
assert solid_data.is_directory
38-
assert solid_data.uid == 1000
39-
assert solid_data.gid == 1000
35+
solid_data = host.file("/opt/solid/data/")
36+
assert solid_data.exists
37+
assert solid_data.is_directory
38+
assert solid_data.uid == 1000
39+
assert solid_data.gid == 1000
40+
4041

4142
def test_solid_db_dir_is_mounted(host):
42-
solid_db = host.file("/opt/solid/.db/")
43-
assert solid_db.exists
44-
assert solid_db.is_directory
45-
assert solid_db.uid == 1000
46-
assert solid_db.gid == 1000
43+
solid_db = host.file("/opt/solid/.db/")
44+
assert solid_db.exists
45+
assert solid_db.is_directory
46+
assert solid_db.uid == 1000
47+
assert solid_db.gid == 1000
48+
4749

4850
def test_solid_config_dir_is_mounted(host):
49-
solid_config = host.file("/opt/solid/config/")
50-
assert solid_config.exists
51-
assert solid_config.is_directory
52-
assert solid_config.uid == 1000
53-
assert solid_config.gid == 1000
51+
solid_config = host.file("/opt/solid/config/")
52+
assert solid_config.exists
53+
assert solid_config.is_directory
54+
assert solid_config.uid == 1000
55+
assert solid_config.gid == 1000

0 commit comments

Comments
 (0)