.gitlab-ci.yml 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. stages:
  2. - build
  3. - build docker
  4. - manifest
  5. - deploy
  6. .build: &build
  7. image: golang:1-alpine
  8. stage: build
  9. cache:
  10. paths:
  11. - .cache
  12. before_script:
  13. - echo "@edge_community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
  14. - apk add build-base olm-dev@edge_community
  15. - mkdir -p .cache
  16. - export GOPATH="$CI_PROJECT_DIR/.cache"
  17. - export GO_LDFLAGS="-X main.Tag=$CI_COMMIT_TAG -X main.Commit=$CI_COMMIT_SHA -X 'main.BuildTime=`date '+%b %_d %Y, %H:%M:%S'`'"
  18. script:
  19. - go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp
  20. artifacts:
  21. paths:
  22. - mautrix-whatsapp
  23. - example-config.yaml
  24. .build-docker: &build-docker
  25. image: docker:stable
  26. stage: build docker
  27. before_script:
  28. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  29. script:
  30. - docker pull $CI_REGISTRY_IMAGE:latest || true
  31. - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH . --file Dockerfile.ci
  32. - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  33. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  34. build static:
  35. image: golang:1-alpine
  36. stage: build
  37. tags:
  38. - amd64
  39. cache:
  40. paths:
  41. - .cache
  42. before_script:
  43. - mkdir -p .cache
  44. - export GOPATH="$CI_PROJECT_DIR/.cache"
  45. - export GO_LDFLAGS="-X main.Tag=$CI_COMMIT_TAG -X main.Commit=$CI_COMMIT_SHA -X 'main.BuildTime=`date '+%b %_d %Y, %H:%M:%S'`'"
  46. variables:
  47. CGO_ENABLED: 0
  48. script:
  49. - GOOS=linux GOARCH=amd64 go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_amd64
  50. - GOOS=linux GOARCH=arm64 go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_arm64
  51. - GOOS=linux GOARCH=arm go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_arm
  52. - GOOS=linux GOARCH=386 go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_386
  53. artifacts:
  54. paths:
  55. - mautrix-whatsapp_linux_amd64
  56. - mautrix-whatsapp_linux_arm64
  57. - mautrix-whatsapp_linux_arm
  58. - mautrix-whatsapp_linux_386
  59. - example-config.yaml
  60. build amd64:
  61. <<: *build
  62. tags:
  63. - amd64
  64. build arm64:
  65. <<: *build
  66. tags:
  67. - arm64
  68. build docker amd64:
  69. <<: *build-docker
  70. tags:
  71. - amd64
  72. dependencies:
  73. - build amd64
  74. needs:
  75. - build amd64
  76. variables:
  77. DOCKER_ARCH: amd64
  78. build docker arm64:
  79. <<: *build-docker
  80. tags:
  81. - arm64
  82. dependencies:
  83. - build arm64
  84. needs:
  85. - build arm64
  86. variables:
  87. DOCKER_ARCH: arm64
  88. manifest:
  89. stage: manifest
  90. variables:
  91. GIT_STRATEGY: none
  92. before_script:
  93. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  94. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  95. needs:
  96. - build docker amd64
  97. - build docker arm64
  98. script:
  99. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  100. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  101. - 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
  102. - 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
  103. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  104. trigger nova build:
  105. image: curlimages/curl
  106. stage: deploy
  107. only:
  108. - master
  109. needs:
  110. - build docker amd64
  111. script:
  112. - curl -X POST -F "token=$NOVA_CI_TRIGGER_TOKEN" -F "ref=master" -F "variables[MAU_COMMIT_SHA]=$CI_COMMIT_SHA" -F "variables[MAU_BRIDGE]=whatsapp" https://gitlab.com/api/v4/projects/19691163/trigger/pipeline