diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a0e18cb8..c45dff99 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -21,6 +21,9 @@ jobs: docker_pkg: - debian - alpine + optional_deps: + - true + - false steps: - name: Checkout uses: actions/checkout@v2 @@ -37,8 +40,7 @@ jobs: id: info run: | VERSION=noop - DOCKERFILE_SLIM=Dockerfile - DOCKERFILE=Dockerfile.full + DOCKERFILE=Dockerfile MINOR="" MAJOR="" if [ "${{ github.event_name }}" = "schedule" ]; then @@ -61,14 +63,12 @@ jobs: if [[ $DOCKER_PKG == alpine ]]; then VERSION="${VERSION}-alpine" VERSION_SLIM="${VERSION}-slim" - DOCKERFILE_SLIM=Dockerfile.alpine - DOCKERFILE=Dockerfile.full.alpine + DOCKERFILE=Dockerfile.alpine fi DOCKER_IMAGES=("drakkan/sftpgo" "ghcr.io/drakkan/sftpgo") TAGS="${DOCKER_IMAGES[0]}:${VERSION}" TAGS_SLIM="${DOCKER_IMAGES[0]}:${VERSION_SLIM}" - BASE_IMAGE="${TAGS_SLIM}" for DOCKER_IMAGE in ${DOCKER_IMAGES[@]}; do if [[ ${DOCKER_IMAGE} != ${DOCKER_IMAGES[0]} ]]; then @@ -94,28 +94,28 @@ jobs: fi done + if [[ $OPTIONAL_DEPS == true ]]; then + echo ::set-output name=version::${VERSION} + echo ::set-output name=tags::${TAGS} + echo ::set-output name=full::true + else + echo ::set-output name=version::${VERSION_SLIM} + echo ::set-output name=tags::${TAGS_SLIM} + echo ::set-output name=full::false + fi echo ::set-output name=dockerfile::${DOCKERFILE} - echo ::set-output name=dockerfile-slim::${DOCKERFILE_SLIM} - echo ::set-output name=version::${VERSION} - echo ::set-output name=version-slim::${VERSION_SLIM} - echo ::set-output name=tags::${TAGS} - echo ::set-output name=tags-slim::${TAGS_SLIM} - echo ::set-output name=base-image::${BASE_IMAGE} echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') echo ::set-output name=sha::${GITHUB_SHA::8} env: DOCKER_PKG: ${{ matrix.docker_pkg }} + OPTIONAL_DEPS: ${{ matrix.optional_deps }} - name: Set up QEMU uses: docker/setup-qemu-action@v1 - - name: Set up builder slim + - name: Set up builder uses: docker/setup-buildx-action@v1 - id: builder-slim - - - name: Set up builder full - uses: docker/setup-buildx-action@v1 - id: builder-full + id: builder - name: Login to Docker Hub uses: docker/login-action@v1 @@ -132,39 +132,17 @@ jobs: password: ${{ secrets.CR_PAT }} if: ${{ github.event_name != 'pull_request' }} - - name: Build and push slim + - name: Build and push uses: docker/build-push-action@v2 with: - builder: ${{ steps.builder-slim.outputs.name }} - file: ./${{ steps.info.outputs.dockerfile-slim }} - platforms: linux/amd64,linux/arm64,linux/ppc64le - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.info.outputs.tags-slim }} - build-args: | - COMMIT_SHA=${{ steps.info.outputs.sha }} - labels: | - org.opencontainers.image.title=SFTPGo - org.opencontainers.image.description=Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support - org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }} - org.opencontainers.image.documentation=${{ fromJson(steps.repo.outputs.result).html_url }}/blob/${{ github.sha }}/docker/README.md - org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).html_url }} - org.opencontainers.image.version=${{ steps.info.outputs.version }} - org.opencontainers.image.created=${{ steps.info.outputs.created }} - org.opencontainers.image.revision=${{ github.sha }} - org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }} - - - name: Build and push full - if: ${{ github.event_name != 'pull_request' }} - uses: docker/build-push-action@v2 - with: - builder: ${{ steps.builder-full.outputs.name }} + builder: ${{ steps.builder.outputs.name }} file: ./${{ steps.info.outputs.dockerfile }} platforms: linux/amd64,linux/arm64,linux/ppc64le push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.info.outputs.tags }} build-args: | COMMIT_SHA=${{ steps.info.outputs.sha }} - BASE_IMAGE=${{ steps.info.outputs.base-image }} + INSTALL_OPTIONAL_PACKAGES=${{ steps.info.outputs.full }} labels: | org.opencontainers.image.title=SFTPGo org.opencontainers.image.description=Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support diff --git a/Dockerfile b/Dockerfile index c1246d59..712fe6c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,8 +25,13 @@ RUN set -xe && \ FROM debian:buster-slim +# Set to "true" to install the optional git and rsync dependencies +ARG INSTALL_OPTIONAL_PACKAGES=false + RUN apt-get update && apt-get install --no-install-recommends -y ca-certificates mime-support && rm -rf /var/lib/apt/lists/* +RUN if [ "${INSTALL_OPTIONAL_PACKAGES}" = "true" ]; then apt-get update && apt-get install --no-install-recommends -y git rsync && rm -rf /var/lib/apt/lists/*; fi + RUN mkdir -p /etc/sftpgo /var/lib/sftpgo /usr/share/sftpgo /srv/sftpgo RUN groupadd --system -g 1000 sftpgo && \ diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 275d2c3f..8f72bec2 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -28,8 +28,13 @@ RUN set -xe && \ FROM alpine:3.12 +# Set to "true" to install the optional git and rsync dependencies +ARG INSTALL_OPTIONAL_PACKAGES=false + RUN apk add --update --no-cache ca-certificates tzdata mailcap +RUN if [ "${INSTALL_OPTIONAL_PACKAGES}" = "true" ]; then apk add --update --no-cache rsync git; fi + # set up nsswitch.conf for Go's "netgo" implementation # https://github.com/gliderlabs/docker-alpine/issues/367#issuecomment-424546457 RUN test ! -e /etc/nsswitch.conf && echo 'hosts: files dns' > /etc/nsswitch.conf diff --git a/Dockerfile.full b/Dockerfile.full deleted file mode 100644 index f36836d0..00000000 --- a/Dockerfile.full +++ /dev/null @@ -1,10 +0,0 @@ -ARG BASE_IMAGE - -FROM ${BASE_IMAGE} - -USER root - -# Install some optional packages used by SFTPGo features -RUN apt-get update && apt-get install --no-install-recommends -y git rsync && rm -rf /var/lib/apt/lists/* - -USER 1000:1000 \ No newline at end of file diff --git a/Dockerfile.full.alpine b/Dockerfile.full.alpine deleted file mode 100644 index ec0b0f0f..00000000 --- a/Dockerfile.full.alpine +++ /dev/null @@ -1,10 +0,0 @@ -ARG BASE_IMAGE - -FROM ${BASE_IMAGE} - -USER root - -# Install some optional packages used by SFTPGo features -RUN apk add --update --no-cache rsync git - -USER 1000:1000 \ No newline at end of file diff --git a/httpd/web.go b/httpd/web.go index 35f81b86..994c0346 100644 --- a/httpd/web.go +++ b/httpd/web.go @@ -519,7 +519,7 @@ func getUserPermissionsFromPostFields(r *http.Request) map[string][]string { perms := []string{} for _, p := range strings.Split(dirPerms[1], ",") { cleanedPerm := strings.TrimSpace(p) - if len(cleanedPerm) > 0 { + if cleanedPerm != "" { perms = append(perms, cleanedPerm) } } diff --git a/version/version.go b/version/version.go index d2e3782b..37a9587f 100644 --- a/version/version.go +++ b/version/version.go @@ -2,7 +2,7 @@ package version import "strings" -const version = "2.0.1" +const version = "2.0.1-dev" var ( commit = ""