From c161ea0c698b5c113fbf97cfbdde8c189232ef33 Mon Sep 17 00:00:00 2001 From: JP Simard Date: Thu, 17 Mar 2022 17:27:05 -0400 Subject: [PATCH] Build additional Docker image with Swift 5.5 (#3904) * Build additional Docker image with Swift 5.5 * Build `swiftlint_linux_swift_5_5.zip` --- .github/workflows/docker.yml | 38 ++++++++++++++++++++++++++++++++++ .gitignore | 4 +--- Dockerfile@swift-5.5 | 40 ++++++++++++++++++++++++++++++++++++ Makefile | 9 +++++++- 4 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 Dockerfile@swift-5.5 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 80f7a9eb8e5..44e05b35af8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -44,3 +44,41 @@ jobs: with: push: true tags: ghcr.io/${{ env.REPOSITORY_LC }}:${{ env.DOCKER_TAG }} + + build_5_5: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Extract DOCKER_TAG using tag name + if: startsWith(github.ref, 'refs/tags/') + run: | + echo "DOCKER_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + + - name: Use default DOCKER_TAG + if: startsWith(github.ref, 'refs/tags/') != true + run: | + echo "DOCKER_TAG=latest" >> $GITHUB_ENV + + - name: Set lowercase repository name + run: | + echo "REPOSITORY_LC=${REPOSITORY,,}" >>${GITHUB_ENV} + env: + REPOSITORY: '${{ github.repository }}' + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to Github registry + uses: docker/login-action@v1 + with: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: ghcr.io + + - uses: docker/build-push-action@v2 + with: + push: true + file: Dockerfile@swift-5.5 + tags: ghcr.io/${{ env.REPOSITORY_LC }}:5.5-${{ env.DOCKER_TAG }} diff --git a/.gitignore b/.gitignore index 71cfc59cf0d..c3276050044 100644 --- a/.gitignore +++ b/.gitignore @@ -38,10 +38,8 @@ xcuserdata # SwiftLint SwiftLint.pkg -SwiftLintFramework.framework.zip +*.zip benchmark_* -portable_swiftlint.zip -swiftlint_linux.zip osscheck/ docs/ rule_docs/ diff --git a/Dockerfile@swift-5.5 b/Dockerfile@swift-5.5 new file mode 100644 index 00000000000..473bff2229a --- /dev/null +++ b/Dockerfile@swift-5.5 @@ -0,0 +1,40 @@ +# Explicitly specify `focal` because `swift:latest` does not use `ubuntu:latest`. +ARG BUILDER_IMAGE=swift:5.5-focal +ARG RUNTIME_IMAGE=ubuntu:focal + +# builder image +FROM ${BUILDER_IMAGE} AS builder +RUN apt-get update && apt-get install -y \ + libcurl4-openssl-dev \ + libxml2-dev \ + && rm -r /var/lib/apt/lists/* +WORKDIR /workdir/ +COPY Source Source/ +COPY Tests Tests/ +COPY Package.* ./ + +RUN ln -s /usr/lib/swift/_InternalSwiftSyntaxParser . + +ARG SWIFT_FLAGS="-c release -Xswiftc -static-stdlib -Xlinker -lCFURLSessionInterface -Xlinker -lCFXMLInterface -Xlinker -lcurl -Xlinker -lxml2 -Xswiftc -I. -Xlinker -fuse-ld=lld -Xlinker -L/usr/lib/swift/linux" +RUN swift build $SWIFT_FLAGS +RUN mkdir -p /executables +RUN for executable in $(swift package completion-tool list-executables); do \ + install -v `swift build $SWIFT_FLAGS --show-bin-path`/$executable /executables; \ + done + +# runtime image +FROM ${RUNTIME_IMAGE} +LABEL org.opencontainers.image.source https://github.com/realm/SwiftLint +RUN apt-get update && apt-get install -y \ + libcurl4 \ + libxml2 \ + && rm -r /var/lib/apt/lists/* +COPY --from=builder /usr/lib/libsourcekitdInProc.so /usr/lib +COPY --from=builder /usr/lib/swift/linux/libBlocksRuntime.so /usr/lib +COPY --from=builder /usr/lib/swift/linux/libdispatch.so /usr/lib +COPY --from=builder /usr/lib/swift/linux/lib_InternalSwiftSyntaxParser.so /usr/lib +COPY --from=builder /executables/* /usr/bin + +RUN swiftlint version + +CMD ["swiftlint"] diff --git a/Makefile b/Makefile index 130abcbe6f4..27ac075cf7e 100644 --- a/Makefile +++ b/Makefile @@ -118,6 +118,13 @@ zip_linux_release: cp -f "$(LICENSE_PATH)" "$(TMP_FOLDER)" (cd "$(TMP_FOLDER)"; zip -yr - "swiftlint" "LICENSE") > "./swiftlint_linux.zip" +zip_linux_release_5_5: + $(eval TMP_FOLDER := $(shell mktemp -d)) + docker run ghcr.io/realm/swiftlint:5.5-$(VERSION_STRING) cat /usr/bin/swiftlint > "$(TMP_FOLDER)/swiftlint" + chmod +x "$(TMP_FOLDER)/swiftlint" + cp -f "$(LICENSE_PATH)" "$(TMP_FOLDER)" + (cd "$(TMP_FOLDER)"; zip -yr - "swiftlint" "LICENSE") > "./swiftlint_linux_swift_5_5.zip" + package: build $(eval PACKAGE_ROOT := $(shell mktemp -d)) cp "$(SWIFTLINT_EXECUTABLE)" "$(PACKAGE_ROOT)" @@ -128,7 +135,7 @@ package: build --version $(VERSION_STRING) \ "$(OUTPUT_PACKAGE)" -release: package portable_zip zip_linux_release +release: package portable_zip zip_linux_release zip_linux_release_5_5 docker_image: docker build --platform linux/amd64 --force-rm --tag swiftlint .