Merge branch 'CI-test' into 'master'

Ci test

See merge request dedyms/deemix-docker!1
This commit is contained in:
Dedy Martadinata Supriyadi 2022-02-11 17:43:36 +00:00
commit 79237560a5
5 changed files with 198 additions and 29 deletions

View File

@ -1,23 +1,103 @@
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_DOCKER: "linux/amd64,linux/arm64"
PLATFORMS_TEST: "linux/amd64"
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/deemix-docker/${CI_COMMIT_SHORT_SHA}"
ZIP_NAME: "deemix-docker"
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-binary
- create-release
- build-docker-image
build:
stage: build
build-deemix:
image: node:16
stage: build-deemix
script:
- apt update && apt install -y --no-install-recommends zip git curl
- git clone --depth=1 https://gitlab.com/RemixDev/deemix-gui.git --recursive
- cp server.package.json deemix-gui/server/package.json
- cd deemix-gui
- yarn config set network-timeout 1000000 -g
- yarn install-all
- yarn dist-server
- ls -al dist/
- |
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
only:
refs:
- CI-test
#changes:
# - server.package.json
#artifacts:
# paths:
# - deemix-gui/
#build-binary:
# image: docker:19
# stage: build-binary
# 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
# - 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
# - chmod a+x ~/.docker/cli-plugins/docker-buildx
# Get and run the latest docker/binfmt tag to use its qemu parts
# - BINFMT_IMAGE_TAG=$(curl -s https://registry.hub.docker.com/v2/repositories/docker/binfmt/tags | jq '.results | sort_by(.last_updated)[-1].name' -r)
# - 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 --build-arg PACKAGE_REGISTRY_URL=${PACKAGE_REGISTRY_URL} --build-arg JOB_TOKEN=${CI_JOB_TOKEN} --platform "${PLATFORMS_TEST}" . -f Dockerfile.binary
# # 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:
# - CI-test
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 $DATE" --tag-name $CI_COMMIT_SHA \
--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\"}"
only:
refs:
- CI-test
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
- mkdir -p ~/.docker/cli-plugins/
@ -31,4 +111,9 @@ build:
- docker buildx create --name multibuilder
- docker buildx use multibuilder
# build and push
- docker buildx build --platform "${PLATFORMS}" -t $IMAGE:${IMAGE_TAG} . --push
- docker buildx build --platform "${PLATFORMS_DOCKER}" -t ${CI_REGISTRY_IMAGE}:${IMAGE_TAG_TEST} . --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:
- CI-test

View File

@ -1,5 +1,5 @@
FROM lsiobase/ubuntu:focal
ARG TARGETARCH
ARG BUILDDATE
ENV BUILDDATEENV=${BUILDDATE}
@ -10,19 +10,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 https://gitlab.com/api/v4/projects/33610953/packages/generic/deemix-docker/deemix-docker/deemix-server-linux-$TARGETARCH -o deemix-server
COPY root/ /

14
Dockerfile.binary Normal file
View File

@ -0,0 +1,14 @@
FROM node:16
ARG PACKAGE_REGISTRY_URL
ARG TARGETARCH
ARG JOB_TOKEN
RUN apt update && apt install -y --no-install-recommends curl git && echo $TARGETARCH
COPY deemix-gui deemix-gui
WORKDIR deemix-gui/
COPY server.package.json server/package.json
# Only install pkg
#RUN sed -i 's/node16-win-x64/node16-linux-arm64/g' server/package.json
RUN yarn config set network-timeout 1000000 -g && yarn add pkg@latest
RUN yarn dist-server && ls -al dist/ && \
curl --header "JOB-TOKEN: ${JOB_TOKEN}" --upload-file dist/deemix-server-x64 ${PACKAGE_REGISTRY_URL}/deemix-server-linux-amd64 && \
curl --header "JOB-TOKEN: ${JOB_TOKEN}" --upload-file dist/deemix-server-arm64 ${PACKAGE_REGISTRY_URL}/deemix-server-linux-arm64

View File

@ -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
s6-setuidgid abc /deemix-server

78
server.package.json Normal file
View File

@ -0,0 +1,78 @@
{
"name": "@deemix-gui/deemix-server",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node dist/app.js",
"build": "webpack --env production",
"prewatch": "yarn lint-build",
"watch": "webpack --watch",
"lint": "eslint \"./{src, tests}/**\" --fix",
"lint-build": "eslint \"./src/**\" --fix",
"test": "jest",
"test-watch": "jest --watch"
},
"bin": "./dist/app.js",
"pkg": {
"scripts": "./dist/**/*.js",
"assets": [
"../webui/public/**/*",
"../package.json"
],
"targets": [
"node16-linux-x64",
"node16-linux-arm64"
]
},
"dependencies": {
"@types/node": "14.14.37",
"bufferutil": "4.0.3",
"cookie-parser": "1.4.5",
"@types/cookie-parser": "1.4.2",
"debug": "2.6.9",
"@types/debug": "4.1.5",
"deemix": "^3.6.0",
"deezer-js": "^1.3.0",
"dotenv": "8.2.0",
"express": "4.17.1",
"@types/express": "4.17.11",
"express-session": "^1.17.1",
"@types/express-session": "^1.17.3",
"memorystore": "1.6.6",
"morgan": "1.10.0",
"@types/morgan": "1.9.2",
"ramda": "0.27.1",
"@types/ramda": "0.27.40",
"utf-8-validate": "5.0.5",
"uuid": "8.3.2",
"@types/uuid": "8.3.0",
"ws": "7.4.5",
"@types/ws": "7.4.1",
"yargs": "17.0.1",
"@types/yargs": "17.0.0",
"nodemon": "2.0.7",
"nodemon-webpack-plugin": "4.5.2",
"ts-loader": "9.2.3",
"webpack": "5.41.1",
"webpack-cli": "4.7.2"
},
"devDependencies": {
"@nuxtjs/eslint-config": "6.0.0",
"@types/jest": "26.0.22",
"@types/supertest": "2.0.11",
"@typescript-eslint/eslint-plugin": "4.21.0",
"@typescript-eslint/parser": "4.21.0",
"eslint": "7.23.0",
"eslint-config-prettier": "8.1.0",
"eslint-plugin-prettier": "3.3.1",
"jest": "26.6.3",
"ts-jest": "26.5.4",
"ts-node": "9.1.1",
"ts-node-dev": "1.1.6",
"typescript": "4.2.4",
"prettier": "2.2.1",
"supertest": "6.1.3"
}
}