.gitlab-ci.yml 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. script:
  17. - go build -o mautrix-whatsapp
  18. artifacts:
  19. paths:
  20. - mautrix-whatsapp
  21. - example-config.yaml
  22. .build-docker: &build-docker
  23. image: docker:stable
  24. stage: build docker
  25. before_script:
  26. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  27. script:
  28. - docker pull $CI_REGISTRY_IMAGE:latest || true
  29. - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH . --file Dockerfile.ci
  30. - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  31. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-$DOCKER_ARCH
  32. build static amd64:
  33. image: golang:1-alpine
  34. stage: build
  35. tags:
  36. - amd64
  37. cache:
  38. paths:
  39. - .cache
  40. before_script:
  41. - mkdir -p .cache
  42. - export GOPATH="$CI_PROJECT_DIR/.cache"
  43. script:
  44. - CGO_ENABLED=0 go build -o mautrix-whatsapp
  45. artifacts:
  46. paths:
  47. - mautrix-whatsapp
  48. - example-config.yaml
  49. build amd64:
  50. <<: *build
  51. tags:
  52. - amd64
  53. build arm64:
  54. <<: *build
  55. tags:
  56. - arm64
  57. build docker amd64:
  58. <<: *build-docker
  59. tags:
  60. - amd64
  61. dependencies:
  62. - build amd64
  63. variables:
  64. DOCKER_ARCH: amd64
  65. build docker arm64:
  66. <<: *build-docker
  67. tags:
  68. - arm64
  69. dependencies:
  70. - build arm64
  71. variables:
  72. DOCKER_ARCH: arm64
  73. manifest:
  74. stage: manifest
  75. before_script:
  76. - "mkdir -p $HOME/.docker && echo '{\"experimental\": \"enabled\"}' > $HOME/.docker/config.json"
  77. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  78. script:
  79. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64
  80. - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64
  81. - 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
  82. - 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
  83. - docker rmi $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-amd64 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-arm64