.gitlab-ci.yml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. image: "node:15-slim"
  2. stages:
  3. - test
  4. - artifact
  5. - release
  6. before_script:
  7. # Install dependencies
  8. - apt-get update
  9. - apt-get install -y git python3 build-essential libxtst6
  10. # Prepare Chrome for puppeteer
  11. - apt-get install -y wget gnupg
  12. - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
  13. - sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
  14. - apt-get update
  15. - apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 --no-install-recommends
  16. # Build Send, run npm tests
  17. test:
  18. stage: test
  19. script:
  20. - npm ci
  21. - npm run lint
  22. - npm test
  23. # Build Docker image, export Docker image artifact
  24. artifact-docker:
  25. stage: artifact
  26. image: docker:latest
  27. needs: []
  28. services:
  29. - docker:dind
  30. variables:
  31. IMG_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar"
  32. IMG_NAME: "send:git-$CI_COMMIT_SHORT_SHA"
  33. before_script: []
  34. script:
  35. - docker build -t $IMG_NAME .
  36. - docker image save -o $IMG_FILE $IMG_NAME
  37. artifacts:
  38. name: artifact-docker
  39. paths:
  40. - $IMG_FILE
  41. expire_in: 1 week
  42. # Release public Docker image for the master branch
  43. release-docker-master:
  44. stage: release
  45. image: docker:latest
  46. dependencies:
  47. - artifact-docker
  48. services:
  49. - docker:dind
  50. only:
  51. - master
  52. variables:
  53. IMG_IMPORT_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar"
  54. IMG_IMPORT_NAME: "send:git-$CI_COMMIT_SHORT_SHA"
  55. IMG_NAME: "registry.gitlab.com/timvisee/send:master-$CI_COMMIT_SHORT_SHA"
  56. before_script: []
  57. script:
  58. # Login in to registry
  59. - 'docker login registry.gitlab.com -u $DOCKER_USER -p $DOCKER_PASS'
  60. # Load existing, retag for new image images
  61. - docker image load -i $IMG_IMPORT_FILE
  62. - docker tag $IMG_IMPORT_NAME $IMG_NAME
  63. # Publish tagged image
  64. - docker push $IMG_NAME
  65. - 'echo "Docker image artifact published, available as:" && echo " docker pull $IMG_NAME"'
  66. # Release public Docker image for a version tag
  67. release-docker:
  68. stage: release
  69. image: docker:latest
  70. dependencies:
  71. - artifact-docker
  72. services:
  73. - docker:dind
  74. only:
  75. - /^v(\d+\.)*\d+$/
  76. variables:
  77. IMG_IMPORT_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar"
  78. IMG_IMPORT_NAME: "send:git-$CI_COMMIT_SHORT_SHA"
  79. IMG_NAME: "registry.gitlab.com/timvisee/send:$CI_COMMIT_REF_NAME"
  80. IMG_NAME_LATEST: "registry.gitlab.com/timvisee/send:latest"
  81. before_script: []
  82. script:
  83. # Login in to registry
  84. - 'docker login registry.gitlab.com -u $DOCKER_USER -p $DOCKER_PASS'
  85. # Load existing, retag for new image images
  86. - docker image load -i $IMG_IMPORT_FILE
  87. - docker tag $IMG_IMPORT_NAME $IMG_NAME
  88. - docker tag $IMG_IMPORT_NAME $IMG_NAME_LATEST
  89. # Publish tagged image
  90. - docker push $IMG_NAME
  91. - docker push $IMG_NAME_LATEST
  92. - 'echo "Docker image artifact published, available as:" && echo " docker pull $IMG_NAME_LATEST" && echo " docker pull $IMG_NAME"'