diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c525978..4b3921b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,25 +1,99 @@ -image: docker:19 -services: - - docker:dind - -stages: - - build - variables: - IMAGE: registry.gitlab.com/bockiii/deemix-docker IMAGE_TAG: latest + IMAGE_TAG_TEST: test DOCKER_CLI_EXPERIMENTAL: enabled PLATFORMS: "linux/amd64,linux/arm64,linux/arm/v7" + PLATFORMS_TEST: "linux/amd64" + PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/deemix-docker/${CI_COMMIT_SHORT_SHA}" + # Docker build will download via this url + PACKAGE_REGISTRY_URL_STATIC: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/deemix-docker/static" + ZIP_NAME: "deemix-docker" + npm_config_cache: "$CI_PROJECT_DIR/.npm" + PKG_CACHE_PATH: "$CI_PROJECT_DIR/.nodejs-bin" + YARN_CACHE_FOLDER: "$CI_PROJECT_DIR/.yarn-cache" + -before_script: - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - apk add --update curl jq && rm -rf /var/cache/apk/* - - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds) +stages: + - build-deemix + - build-docker-image + - create-release -build: - stage: build +build-deemix: + image: node:16 + stage: build-deemix + cache: + key: "$CI_COMMIT_REF_SLUG" + paths: + - .npm + - .nodejs-bin + - .yarn-cache + policy: pull-push + script: + - apt update && apt install -y --no-install-recommends zip git curl jq + - git clone --depth=1 https://gitlab.com/RemixDev/deemix-gui.git --recursive src + # Patching pkg.targets to our need + - jq '.pkg.targets = ["node16-linuxstatic-x64","node16-linuxstatic-arm64","node16-linuxstatic-armv7"]' src/server/package.json > tmp.$$.json && mv tmp.$$.json src/server/package.json + - cd src + - ls -alh + - yarn config set network-timeout 1000000 -g + - yarn add pkg@latest + - yarn install-all + - yarn dist-server + - ls -al dist/ + # Upload static + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file dist/deemix-server-x64 ${PACKAGE_REGISTRY_URL_STATIC}/deemix-server-linux-amd64 + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file dist/deemix-server-arm64 ${PACKAGE_REGISTRY_URL_STATIC}/deemix-server-linux-arm64 + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file dist/deemix-server-armv7 ${PACKAGE_REGISTRY_URL_STATIC}/deemix-server-linux-arm + # Upload per CI_COMMIT_SHORT_SHA + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file dist/deemix-server-x64 ${PACKAGE_REGISTRY_URL}/deemix-server-linux-amd64 + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file dist/deemix-server-arm64 ${PACKAGE_REGISTRY_URL}/deemix-server-linux-arm64 + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file dist/deemix-server-armv7 ${PACKAGE_REGISTRY_URL}/deemix-server-linux-arm + only: + refs: + - master + +create-release: + stage: create-release + image: registry.gitlab.com/gitlab-org/release-cli:latest + #rules: + # - if: $CI_COMMIT_SHA + script: + - export DATE=$(date +%Y%m%d) #Cant tag same twice use $CI_COMMIT_SHA for a while + - | + release-cli create --name "Release $CI_COMMIT_SHORT_SHA" --tag-name $CI_COMMIT_SHORT_SHA --description "rollback to this version by changing the docker TAG release code above, registry.gitlab.com/bockiii/deemix-docker:TAG" \ + --assets-link "{\"name\":\"deemix-server-linux-amd64\",\"url\":\"${PACKAGE_REGISTRY_URL}/deemix-server-linux-amd64\"}" \ + --assets-link "{\"name\":\"deemix-server-linux-arm64\",\"url\":\"${PACKAGE_REGISTRY_URL}/deemix-server-linux-arm64\"}" \ + --assets-link "{\"name\":\"deemix-server-linux-armv7\",\"url\":\"${PACKAGE_REGISTRY_URL}/deemix-server-linux-arm\"}" \ + --assets-link "{\"name\":\"deemix-server-linux-static-amd64\",\"url\":\"${PACKAGE_REGISTRY_URL_STATIC}/deemix-server-linux-amd64\"}" \ + --assets-link "{\"name\":\"deemix-server-linux-static-arm64\",\"url\":\"${PACKAGE_REGISTRY_URL_STATIC}/deemix-server-linux-arm64\"}" \ + --assets-link "{\"name\":\"deemix-server-linux-static-armv7\",\"url\":\"${PACKAGE_REGISTRY_URL_STATIC}/deemix-server-linux-arm\"}" \ + --assets-link "{\"name\":\"deemix-server-docker-pull\",\"url\":\"https://registry.gitlab.com/bockiii/deemix-docker:${CI_COMMIT_SHORT_SHA}\"}" + only: + refs: + - master + +build-docker-image: + image: docker:19 + #dependencies: + # - build-deemix + stage: build-docker-image + services: + - docker:dind + before_script: + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY + - apk add --update curl jq && rm -rf /var/cache/apk/* + - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds) + - export DATE=$(date +%Y%m%d) script: # Download latest buildx bin from github + - export DATE=$(date +%Y%m%d) + #Format 20220212 - mkdir -p ~/.docker/cli-plugins/ - BUILDX_LATEST_BIN_URI=$(curl -s -L https://github.com/docker/buildx/releases/latest | grep 'linux-amd64' | grep 'href' | sed 's/.*href="/https:\/\/github.com/g; s/amd64".*/amd64/g') - curl -s -L ${BUILDX_LATEST_BIN_URI} -o ~/.docker/cli-plugins/docker-buildx @@ -29,6 +103,11 @@ build: - docker run --rm --privileged docker/binfmt:${BINFMT_IMAGE_TAG} # create the multibuilder - docker buildx create --name multibuilder - - docker buildx use multibuilder - # build and push - - docker buildx build --platform "${PLATFORMS}" -t $IMAGE:${IMAGE_TAG} . --push + - docker buildx use multibuilder + # build and push, still need fix download url in dockerfile + - docker buildx build --platform "${PLATFORMS}" --build-arg BUILDDATE=$DATE --build-arg STATIC_URL=$PACKAGE_REGISTRY_URL_STATIC -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA} -t ${CI_REGISTRY_IMAGE} . --push + # Also can do using date, so we dont dependant on latest, in case application break again. + #- docker buildx build --platform "${PLATFORMS}" -t ${CI_REGISTRY_IMAGE}:${DATE} -t $CI_REGISTRY_IMAGE:${IMAGE_TAG} . --push + only: + refs: + - master diff --git a/Dockerfile b/Dockerfile index 2b1c322..f3cd950 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,8 @@ -FROM lsiobase/ubuntu:focal - +FROM lsiobase/alpine:3.15 +#Add addiitional packages +RUN apk add --no-cache curl +ARG TARGETARCH +ARG STATIC_URL ARG BUILDDATE ENV BUILDDATEENV=${BUILDDATE} @@ -10,19 +13,11 @@ LABEL \ app.deemix.image.description="Docker image for Deemix" \ maintainer="Bocki" -RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash && \ - apt-get -y --no-install-recommends install >/dev/null \ - nodejs \ - jq \ - iputils-ping \ - unzip \ - curl && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* && \ - mkdir /downloads +#RUN curl -L -o deemix.zip http://gitlab.com/Bockiii/deemix-src/-/jobs/artifacts/master/download?job=dl_src && \ +# unzip deemix -RUN curl -L -o deemix.zip http://gitlab.com/Bockiii/deemix-src/-/jobs/artifacts/master/download?job=dl_src && \ - unzip deemix +# Need look again in project num +RUN curl -L $STATIC_URL/deemix-server-linux-$TARGETARCH -o deemix-server COPY root/ / diff --git a/root/etc/cont-init.d/10-fix_folders b/root/etc/cont-init.d/10-fix_folders index 18c2396..fcdbaae 100644 --- a/root/etc/cont-init.d/10-fix_folders +++ b/root/etc/cont-init.d/10-fix_folders @@ -8,6 +8,8 @@ chown -R abc:abc /config # find all folders in the download folder and own them to the container user. This will not change files but should run quicker on big collections. find /downloads -type d -exec chown abc:abc {} + +# add executability to server +chmod +x /deemix-server # Fix misconfigured download locations. The container's download map is always /downloads. if [ -f "/config/config.json" ]; then diff --git a/root/etc/services.d/deemix/run b/root/etc/services.d/deemix/run index 97f16b1..88e521e 100644 --- a/root/etc/services.d/deemix/run +++ b/root/etc/services.d/deemix/run @@ -17,4 +17,4 @@ export DEEMIX_SERVER_PORT=$port export DEEMIX_HOST=0.0.0.0 echo "[services.d] Starting Deemix" -s6-setuidgid abc node /deemix-gui/server/dist/app.js \ No newline at end of file +s6-setuidgid abc /deemix-server