summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 256cb08fe9436c3cd5e8a7507551bf1207fba9ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
stages:
  - test
  - deploy

testCommit:
  stage: test
  image: node:jod
  services:
    - postgres:15
    - redis
  variables:
    POSTGRES_PASSWORD: ci
    COREPACK_DEFAULT_TO_LATEST: 0
  script:
    - apt-get update && apt-get install -y git wget curl build-essential python3 ffmpeg
    - cp .config/ci.yml .config/default.yml
    - cp .config/ci.yml .config/test.yml
    - corepack enable
    - corepack install
    - git submodule update --init
    - pnpm install --frozen-lockfile
    - pnpm run build
    - pnpm run migrate
    - pnpm run test
    - pnpm run --filter=backend --filter=misskey-js --filter=frontend-shared lint
    - pnpm run --filter=frontend --filter=frontend-embed eslint
  cache:
    key: test
    policy: pull-push
    when: on_success
    paths:
     - node_modules/
     - packages/*/node_modules/
  only:
    - develop
    - merge_requests
    - stable

getImageTag:
  stage: deploy
  image: ubuntu:latest
  script:
    - apt-get update && apt-get install -y jq
    - |
      if test -n "$CI_COMMIT_TAG"; then
        tag="$CI_COMMIT_TAG"
      elif test "$CI_COMMIT_BRANCH" == "stable"; then
        tag="latest"
      elif test "$CI_COMMIT_BRANCH" == "develop"; then
        tag="develop"
      else
        tag="$CI_COMMIT_BRANCH"
      fi
      version=$(cat package.json | jq -r '.version')
    - echo "REGISTRY_PUSH_TAG=$tag" >> build.env
    - echo "REGISTRY_PUSH_VERSION=$version" >> build.env
  artifacts:
    reports:
      dotenv: build.env
  only:
    - stable
    - develop
    - tags

buildDocker:
  stage: deploy
  needs:
    - job: getImageTag
      artifacts: true
  parallel:
    matrix:
      - ARCH: amd64
      - ARCH: arm64
  tags:
    - ${ARCH}
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${REGISTRY_PUSH_VERSION}-${ARCH}"
  only:
    - stable
    - develop
    - tags

mergeManifests:
  stage: deploy
  needs:
    - job: buildDocker
      artifacts: false
    - job: getImageTag
      artifacts: true
  tags:
    - docker
  image:
      name: mplatform/manifest-tool:alpine
      entrypoint: [""]
  script:
    - >-
      manifest-tool
      --username=${CI_REGISTRY_USER}
      --password=${CI_REGISTRY_PASSWORD}
      push from-args
      --platforms linux/amd64,linux/arm64
      --tags ${REGISTRY_PUSH_VERSION}
      --template ${CI_REGISTRY_IMAGE}:${REGISTRY_PUSH_VERSION}-ARCH
      --target ${CI_REGISTRY_IMAGE}:${REGISTRY_PUSH_TAG}
  only:
    - stable
    - develop
    - tags