.gitlab-ci.yml 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. artifacts:
  18. paths:
  19. - mautrix-whatsapp
  20. - example-config.yaml
  21. .build-docker: &build-docker
  22. image: docker:stable
  23. stage: build docker
  24. before_script:
  25. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  26. script:
  27. - docker pull $CI_REGISTRY_IMAGE:latest || true
  28. - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH . --file Dockerfile.ci
  29. - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  30. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  31. build amd64:
  32. <<: *build
  33. image: dock.mau.dev/tulir/gomuks-build-docker:linux-amd64
  34. build arm64:
  35. <<: *build
  36. image: dock.mau.dev/tulir/gomuks-build-docker:linux-arm64
  37. build arm:
  38. <<: *build
  39. image: dock.mau.dev/tulir/gomuks-build-docker:linux-arm
  40. build docker amd64:
  41. <<: *build-docker
  42. tags:
  43. - amd64
  44. dependencies:
  45. - build amd64
  46. needs:
  47. - build amd64
  48. variables:
  49. DOCKER_ARCH: amd64
  50. after_script:
  51. - |
  52. if [[ "$CI_COMMIT_BRANCH" == "legacy" && "$CI_JOB_STATUS" == "success" ]]; then
  53. apk add --update curl jq
  54. rm -rf /var/cache/apk/*
  55. jq -n '
  56. {
  57. password: env.BEEPER_DEV_ADMIN_NIGHTLY_PASS,
  58. bridge: env.BEEPER_BRIDGE_TYPE,
  59. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  60. channel: "STABLE"
  61. }
  62. ' | curl "$BEEPER_DEV_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  63. jq -n '
  64. {
  65. password: env.BEEPER_PROD_ADMIN_NIGHTLY_PASS,
  66. bridge: env.BEEPER_BRIDGE_TYPE,
  67. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  68. channel: "INTERNAL",
  69. deployNext: true
  70. }
  71. ' | curl "$BEEPER_PROD_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  72. fi
  73. build docker arm64:
  74. <<: *build-docker
  75. tags:
  76. - arm64
  77. dependencies:
  78. - build arm64
  79. needs:
  80. - build arm64
  81. variables:
  82. DOCKER_ARCH: arm64
  83. manifest:
  84. stage: manifest
  85. variables:
  86. GIT_STRATEGY: none
  87. before_script:
  88. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  89. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  90. needs:
  91. - build docker amd64
  92. - build docker arm64
  93. script:
  94. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  95. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  96. - 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
  97. - 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
  98. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64