feat: Speed up build through DAG improvements
This commit is contained in:
parent
900f5f3bce
commit
894580a1bd
4 changed files with 38 additions and 20 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -37,3 +37,6 @@ node_modules
|
||||||
Brewfile.lock.json
|
Brewfile.lock.json
|
||||||
|
|
||||||
config/*.secret.exs
|
config/*.secret.exs
|
||||||
|
|
||||||
|
# Temporary CI build file
|
||||||
|
build.env
|
||||||
|
|
|
@ -23,46 +23,50 @@ test:
|
||||||
- name: postgres:12
|
- name: postgres:12
|
||||||
script: script/cibuild
|
script: script/cibuild
|
||||||
|
|
||||||
deploy_to_tags:
|
|
||||||
stage: deploy
|
|
||||||
needs: ['test']
|
|
||||||
image: "node:15.0"
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
except:
|
|
||||||
- tags
|
|
||||||
script:
|
|
||||||
- npm install
|
|
||||||
- npx semantic-release
|
|
||||||
|
|
||||||
build_image_for_commit:
|
build_image_for_commit:
|
||||||
stage: test
|
stage: test
|
||||||
needs: []
|
needs: []
|
||||||
image: "docker:19.03.12"
|
image: "docker:19.03.12"
|
||||||
services:
|
services:
|
||||||
- name: docker:19.03.12-dind
|
- name: docker:19.03.12-dind
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
script:
|
script:
|
||||||
- docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
|
- docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
|
||||||
- docker pull $CI_REGISTRY_IMAGE:latest || true
|
- docker pull $CI_REGISTRY_IMAGE:latest || true
|
||||||
- docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
|
- docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
|
||||||
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
|
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
|
||||||
|
|
||||||
|
deploy_to_tags:
|
||||||
|
stage: deploy
|
||||||
|
needs: ['test']
|
||||||
|
image: "node:15.0"
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
script:
|
||||||
|
- npm install
|
||||||
|
- npx semantic-release
|
||||||
|
- script/generate-build-version
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
dotenv: build.env
|
||||||
|
|
||||||
deploy_commit_image_to_tag:
|
deploy_commit_image_to_tag:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
needs: ['test', 'build_image_for_commit']
|
needs:
|
||||||
|
- build_image_for_commit
|
||||||
|
- job: deploy_to_tags
|
||||||
|
artifacts: true
|
||||||
|
only:
|
||||||
|
- master
|
||||||
image: "docker:19.03.12"
|
image: "docker:19.03.12"
|
||||||
services:
|
services:
|
||||||
- name: docker:19.03.12-dind
|
- name: docker:19.03.12-dind
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
script:
|
script:
|
||||||
|
- echo "BUILD_VERSION is ${BUILD_VERSION}"
|
||||||
- docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
|
- docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
|
||||||
# Run the docker pull, but retry if it doesn't work at first because layers may be
|
# Run the docker pull, but retry if it doesn't work at first because layers may be
|
||||||
# still be loading to storage
|
# still be loading to storage
|
||||||
- for i in 1 2 3 4 5; do docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA && break || sleep 15; done
|
- for i in 1 2 3 4 5; do docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA && break || sleep 15; done
|
||||||
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
|
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:$BUILD_VERSION
|
||||||
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
|
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
|
||||||
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
|
- docker push $CI_REGISTRY_IMAGE:$BUILD_VERSION
|
||||||
- docker push $CI_REGISTRY_IMAGE:latest
|
- docker push $CI_REGISTRY_IMAGE:latest
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
[
|
[
|
||||||
"@semantic-release/git",
|
"@semantic-release/git",
|
||||||
{
|
{
|
||||||
"message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}",
|
|
||||||
"assets": [
|
"assets": [
|
||||||
"package.json",
|
"package.json",
|
||||||
"infrastructure/kube.yml"
|
"infrastructure/kube.yml"
|
||||||
|
|
12
script/generate-build-version
Executable file
12
script/generate-build-version
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
const doT = require("dot");
|
||||||
|
|
||||||
|
var packageText = fs.readFileSync("package.json", {encoding: "utf8"});
|
||||||
|
var packageConfig = JSON.parse(packageText);
|
||||||
|
|
||||||
|
const {version} = packageConfig;
|
||||||
|
const template = doT.template("BUILD_VERSION={{=it.version}}")
|
||||||
|
|
||||||
|
fs.writeFileSync("build.env", template({version}));
|
Loading…
Reference in a new issue