stages: - build - package - release build_backend_glibc: stage: build image: reg.gitlab.mattv.de/root/docker-images/ubuntu_build_base:latest script: - SRC="$PWD" - TMP=$(mktemp -d) - cd $TMP - git clone https://github.com/Microsoft/vcpkg.git . - ./bootstrap-vcpkg.sh -disableMetrics - cd $SRC - mkdir -p vcpkg_cache - VCPKG_DEFAULT_BINARY_CACHE=$SRC/vcpkg_cache cmake -B build -S backend -DCMAKE_TOOLCHAIN_FILE=$TMP/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build build - cp build/backend server cache: key: backend_glibc paths: - vcpkg_cache artifacts: paths: - server build_backend_muslc: stage: build image: reg.gitlab.mattv.de/root/docker-images/alpine_build_base:latest script: - SRC="$PWD" - TMP=$(mktemp -d) - cd $TMP - git clone https://github.com/Microsoft/vcpkg.git . - ./bootstrap-vcpkg.sh -disableMetrics - cd $SRC - mkdir -p vcpkg_cache - VCPKG_FORCE_SYSTEM_BINARIES=1 VCPKG_DEFAULT_BINARY_CACHE=$SRC/vcpkg_cache cmake -B build -S backend -DCMAKE_TOOLCHAIN_FILE=$TMP/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build build - cp build/backend server cache: key: backend_muslc paths: - vcpkg_cache artifacts: paths: - server test_and_build_frontend: image: node:latest stage: build cache: key: frontend paths: - frontend/.yarn - frontend/node_modules script: - cd frontend - yarn install --cache-folder .yarn --frozen-lockfile - yarn lint - yarn build artifacts: paths: - frontend/dist/ .package_server: image: alpine:latest stage: package artifacts: paths: - '*.tar' package_server_glibc: extends: .package_server needs: - job: build_backend_glibc artifacts: true - job: test_and_build_frontend artifacts: true script: - mkdir static - mv frontend/dist/* static/ - tar -cvf linux-x64-glibc.tar server static package_server_muslc: extends: .package_server needs: - job: build_backend_muslc artifacts: true - job: test_and_build_frontend artifacts: true script: - mkdir static - mv frontend/dist/* static/ - tar -cvf linux-x64-muslc.tar server static upload_assets: stage: release image: curlimages/curl:latest needs: - job: package_server_glibc artifacts: true - job: package_server_muslc artifacts: true rules: - if: $CI_COMMIT_TAG script: - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file linux-x64-glibc.tar "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/linux-x64-glibc/$CI_COMMIT_TAG/linux-x64-glibc.tar"' - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file linux-x64-muslc.tar "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/linux-x64-muslc/$CI_COMMIT_TAG/linux-x64-muslc.tar"' create_release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest needs: - upload_assets rules: - if: $CI_COMMIT_TAG script: - | release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG \ --assets-link "{\"name\":\"linux-x64-glibc.tar\",\"url\":\"${PACKAGE_REGISTRY_URL}/linux-x64-glibc.tar\"}" \ --assets-link "{\"name\":\"linux-x64-muslc.tar\",\"url\":\"${PACKAGE_REGISTRY_URL}/linux-x64-muslc.tar\"}"