.gitlab-ci.yml 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. stages:
  2. - build
  3. - build docker
  4. - manifest
  5. .build: &build
  6. image: golang:1-alpine
  7. stage: build
  8. cache:
  9. paths:
  10. - .cache
  11. before_script:
  12. - echo "@edge_community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
  13. - apk add build-base olm-dev@edge_community
  14. - mkdir -p .cache
  15. - export GOPATH="$CI_PROJECT_DIR/.cache"
  16. - 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'`'"
  17. script:
  18. - go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp
  19. artifacts:
  20. paths:
  21. - mautrix-whatsapp
  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 --build-arg TARGETARCH=$DOCKER_ARCH --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 static:
  34. image: golang:1-alpine
  35. stage: build
  36. tags:
  37. - amd64
  38. cache:
  39. paths:
  40. - .cache
  41. before_script:
  42. - mkdir -p .cache
  43. - export GOPATH="$CI_PROJECT_DIR/.cache"
  44. - 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'`'"
  45. variables:
  46. CGO_ENABLED: 0
  47. script:
  48. - GOOS=linux GOARCH=amd64 go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_amd64
  49. - GOOS=linux GOARCH=arm64 go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_arm64
  50. - GOOS=linux GOARCH=arm go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_arm
  51. - GOOS=linux GOARCH=386 go build -ldflags "$GO_LDFLAGS" -o mautrix-whatsapp_linux_386
  52. artifacts:
  53. paths:
  54. - mautrix-whatsapp_linux_amd64
  55. - mautrix-whatsapp_linux_arm64
  56. - mautrix-whatsapp_linux_arm
  57. - mautrix-whatsapp_linux_386
  58. - example-config.yaml
  59. build amd64:
  60. <<: *build
  61. tags:
  62. - amd64
  63. build arm64:
  64. <<: *build
  65. tags:
  66. - arm64
  67. build docker amd64:
  68. <<: *build-docker
  69. tags:
  70. - amd64
  71. dependencies:
  72. - build amd64
  73. needs:
  74. - build amd64
  75. variables:
  76. DOCKER_ARCH: amd64
  77. build docker arm64:
  78. <<: *build-docker
  79. tags:
  80. - arm64
  81. dependencies:
  82. - build arm64
  83. needs:
  84. - build arm64
  85. variables:
  86. DOCKER_ARCH: arm64
  87. manifest:
  88. stage: manifest
  89. variables:
  90. GIT_STRATEGY: none
  91. before_script:
  92. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  93. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  94. needs:
  95. - build docker amd64
  96. - build docker arm64
  97. script:
  98. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  99. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  100. - 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
  101. - 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
  102. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64