Skip to content

Commit ef1682e

Browse files
committed
Initial docker setup so that we can locally run linux tests
1 parent 882c999 commit ef1682e

File tree

3 files changed

+111
-0
lines changed

3 files changed

+111
-0
lines changed

docker/Dockerfile

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
ARG swift_version=nightly-main
2+
ARG ubuntu_version=jammy
3+
ARG base_image=docker.io/swiftlang/swift:$swift_version-$ubuntu_version
4+
FROM $base_image
5+
# needed to do again after FROM due to docker limitation
6+
ARG swift_version
7+
ARG ubuntu_version
8+
9+
# set as UTF-8
10+
RUN apt-get update && apt-get install -y locales locales-all
11+
ENV LC_ALL=en_US.UTF-8
12+
ENV LANG=en_US.UTF-8
13+
ENV LANGUAGE=en_US.UTF-8
14+
15+
# Build dependencies
16+
RUN apt-get update && apt-get install -y make curl libc6-dev
17+
18+
# JDK dependency (we require JDK22+ which isn't distributed as package in Jammy)
19+
# We download the latest supported non-LTS version from OpenJDK: https://jdk.java.net
20+
RUN echo "Download JDK for: $(uname -m)"
21+
RUN if [ "$(uname -m)" = 'aarch64' ]; then \
22+
echo "Download JDK for: ARM64" && \
23+
curl https://download.java.net/java/GA/jdk23/3c5b90190c68498b986a97f276efd28a/37/GPL/openjdk-23_linux-aarch64_bin.tar.gz --output jdk.tar.gz && \
24+
EXPECT_JDK_SHA=076dcf7078cdf941951587bf92733abacf489a6570f1df97ee35945ffebec5b7; \
25+
else \
26+
echo "Download JDK for: x86" && \
27+
curl https://download.java.net/java/GA/jdk23/3c5b90190c68498b986a97f276efd28a/37/GPL/openjdk-23_linux-x64_bin.tar.gz --output jdk.tar.gz && \
28+
EXPECT_JDK_SHA=08fea92724127c6fa0f2e5ea0b07ff4951ccb1e2f22db3c21eebbd7347152a67; \
29+
fi
30+
# Verify the downlaoded JDK checksums
31+
RUN JDK_SHA=$(sha256sum jdk.tar.gz | cut -d ' ' -f 1)
32+
RUN if [ "$JDK_SHA" != "$EXPECT_JDK_SHA" ]; then \
33+
echo "Downloaded JDK SHA does not match expected!" && \
34+
exit 1; \
35+
else \
36+
echo "JDK SHA is correct."; \
37+
fi
38+
# Extract and verify the JDK installation
39+
RUN tar xzvf jdk.tar.gz && rm jdk.tar.gz && mv jdk-23 jdk
40+
RUN /jdk/bin/java -version
41+
ENV JAVA_HOME="/jdk"
42+
ENV PATH="$PATH:/jdk/bin"

docker/docker-compose.2204.main.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
services:
2+
3+
runtime-setup:
4+
image: swift-java:22.04-main
5+
build:
6+
args:
7+
base_image: "swiftlang/swift:nightly-main-jammy"
8+
9+
unit-tests:
10+
image: swift-java:22.04-main
11+
12+
integration-tests:
13+
image: swift-java:22.04-main
14+
15+
documentation-check:
16+
image: swift-java:22.04-main
17+
18+
test:
19+
image: swift-java:22.04-main

docker/docker-compose.yaml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# this file is not designed to be run directly
2+
# instead, use the docker-compose.<os>.<swift> files
3+
# eg docker-compose -f docker/docker-compose.yaml -f docker/docker-compose.1604.41.yaml run test
4+
services:
5+
6+
runtime-setup:
7+
image: swift-java:default
8+
build:
9+
context: .
10+
dockerfile: Dockerfile
11+
12+
common: &common
13+
image: swift-java:default
14+
depends_on: [runtime-setup]
15+
volumes:
16+
- ~/.ssh:/root/.ssh
17+
- ..:/swift-java:z
18+
working_dir: /swift-java
19+
environment:
20+
JAVA_HOME: /jdk
21+
cap_drop:
22+
- CAP_NET_RAW
23+
- CAP_NET_BIND_SERVICE
24+
25+
soundness:
26+
<<: *common
27+
command: /bin/bash -xcl "swift -version && uname -a && ./scripts/soundness.sh"
28+
29+
unit-tests:
30+
<<: *common
31+
command: /bin/bash -xcl "swift $${SWIFT_TEST_VERB-test} $${WARN_AS_ERROR_ARG-} $${IMPORT_CHECK_ARG-}"
32+
33+
test-swift:
34+
<<: *common
35+
command: /bin/bash -xcl "uname -a && swift -version && /jdk/bin/java -version && swift $${SWIFT_TEST_VERB-test} $${WARN_AS_ERROR_ARG-} $${SANITIZER_ARG-} $${IMPORT_CHECK_ARG-}"
36+
37+
test-java:
38+
<<: *common
39+
command: /bin/bash -xcl "uname -a && swift -version && /jdk/bin/java -version && ./gradlew test"
40+
41+
test:
42+
<<: *common
43+
command: /bin/bash -xcl "uname -a && swift -version && /jdk/bin/java -version && swift $${SWIFT_TEST_VERB-test} $${WARN_AS_ERROR_ARG-} $${SANITIZER_ARG-} $${IMPORT_CHECK_ARG-} && ./gradlew test"
44+
45+
# util
46+
47+
shell:
48+
<<: *common
49+
entrypoint: /bin/bash
50+

0 commit comments

Comments
 (0)