.gitlab-ci.yml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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_DEV_ADMIN_NIGHTLY_PASS,
  68. bridge: env.BEEPER_BRIDGE_TYPE,
  69. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  70. channel: "NIGHTLY"
  71. }
  72. ' | curl "$BEEPER_DEV_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  73. jq -n '
  74. {
  75. password: env.BEEPER_PROD_ADMIN_NIGHTLY_PASS,
  76. bridge: env.BEEPER_BRIDGE_TYPE,
  77. image: "\(env.CI_REGISTRY_IMAGE):\(env.CI_COMMIT_SHA)-amd64",
  78. channel: "INTERNAL",
  79. deployNext: true
  80. }
  81. ' | curl "$BEEPER_PROD_ADMIN_API_URL" -H "Content-Type: application/json" -d @-
  82. fi
  83. build docker arm64:
  84. <<: *build-docker
  85. tags:
  86. - arm64
  87. dependencies:
  88. - build arm64
  89. needs:
  90. - build arm64
  91. variables:
  92. DOCKER_ARCH: arm64
  93. manifest:
  94. stage: manifest
  95. variables:
  96. GIT_STRATEGY: none
  97. before_script:
  98. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  99. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  100. needs:
  101. - build docker amd64
  102. - build docker arm64
  103. script:
  104. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  105. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  106. - 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
  107. - 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
  108. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64