.gitlab-ci.yml 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. stages:
  2. - build
  3. - build docker
  4. - manifest
  5. .build: &build
  6. stage: build
  7. cache:
  8. paths:
  9. - .cache
  10. before_script:
  11. - mkdir -p .cache
  12. - export GOPATH="$CI_PROJECT_DIR/.cache"
  13. - export GOCACHE="$CI_PROJECT_DIR/.cache/build"
  14. - export GO_LDFLAGS="-s -w -linkmode external -extldflags -static -X main.Tag=$CI_COMMIT_TAG -X main.Commit=$CI_COMMIT_SHA -X 'main.BuildTime=`date '+%b %_d %Y, %H:%M:%S'`'"
  15. script:
  16. - go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp
  17. - sha256sum mautrix-whatsapp | tee mautrix-whatsapp.sha256sum
  18. artifacts:
  19. paths:
  20. - mautrix-whatsapp
  21. - mautrix-whatsapp.sha256sum
  22. - example-config.yaml
  23. .build-docker: &build-docker
  24. image: docker:stable
  25. stage: build docker
  26. before_script:
  27. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  28. script:
  29. - docker pull $CI_REGISTRY_IMAGE:latest || true
  30. - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH . --file Dockerfile.ci
  31. - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  32. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  33. build amd64:
  34. <<: *build
  35. image: dock.mau.dev/tulir/gomuks-build-docker:linux-amd64
  36. build arm64:
  37. <<: *build
  38. image: dock.mau.dev/tulir/gomuks-build-docker:linux-arm64
  39. build arm:
  40. <<: *build
  41. image: dock.mau.dev/tulir/gomuks-build-docker:linux-arm
  42. build docker amd64:
  43. <<: *build-docker
  44. tags:
  45. - amd64
  46. dependencies:
  47. - build amd64
  48. needs:
  49. - build amd64
  50. variables:
  51. DOCKER_ARCH: amd64
  52. after_script:
  53. - |
  54. if [[ "$CI_COMMIT_BRANCH" == "master" && "$CI_JOB_STATUS" == "success" ]]; then
  55. apk add --update curl jq
  56. rm -rf /var/cache/apk/*
  57. jq -n '
  58. {
  59. password: env.BEEPER_DEV_ADMIN_NIGHTLY_PASS,
  60. bridge: env.BEEPER_BRIDGE_TYPE,
  61. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  62. channel: "STABLE"
  63. }
  64. ' | curl "$BEEPER_DEV_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  65. jq -n '
  66. {
  67. password: env.BEEPER_PROD_ADMIN_NIGHTLY_PASS,
  68. bridge: env.BEEPER_BRIDGE_TYPE,
  69. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  70. channel: "INTERNAL",
  71. deployNext: true
  72. }
  73. ' | curl "$BEEPER_PROD_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  74. fi
  75. build docker arm64:
  76. <<: *build-docker
  77. tags:
  78. - arm64
  79. dependencies:
  80. - build arm64
  81. needs:
  82. - build arm64
  83. variables:
  84. DOCKER_ARCH: arm64
  85. manifest:
  86. stage: manifest
  87. variables:
  88. GIT_STRATEGY: none
  89. before_script:
  90. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  91. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  92. needs:
  93. - build docker amd64
  94. - build docker arm64
  95. script:
  96. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  97. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  98. - if [ "$CI_COMMIT_BRANCH" = "master" ]; then docker manifest create $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64 && docker manifest push $CI_REGISTRY_IMAGE:latest; fi
  99. - if [ "$CI_COMMIT_BRANCH" != "master" ]; then docker manifest create $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64 && docker manifest push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME; fi
  100. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64