summaryrefslogtreecommitdiffstats
path: root/bootstrap/.gitlab-ci.yml
blob: 77b4e4fe290e7b15b6e4d5a068a248bbce06a79e (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
116
117
118
119
120
121
---
.build_image_template:
  image: quay.io/podman/stable:latest
  stage: images
  tags:
    # We need to make sure we only use gitlab.com
    # runners and not our own runners, as our current runners
    # don't allow 'docker build ...' to run.
    - saas-linux-small-amd64
  variables:
    SAMBA_CI_IS_BROKEN_IMAGE: "no"
    SAMBA_CI_TEST_JOB: "samba-o3"
  before_script:
    # install prerequisites
    - dnf install -qy diffutils
    # Ensure we are generating correct the container
    - uname -a
    - cat /etc/os-release
    - echo "SAMBA_CI_CONTAINER_REGISTRY[${SAMBA_CI_CONTAINER_REGISTRY}]"
    - echo "SAMBA_CI_CONTAINER_TAG[${SAMBA_CI_CONTAINER_TAG}]"
    - echo "SAMBA_CI_IS_BROKEN_IMAGE[${SAMBA_CI_IS_BROKEN_IMAGE}]"
    - echo "SAMBA_CI_REBUILD_IMAGES[${SAMBA_CI_REBUILD_IMAGES}]"
    - echo "SAMBA_CI_REBUILD_BROKEN_IMAGES[${SAMBA_CI_REBUILD_BROKEN_IMAGES}]"
    - echo "GITLAB_USER_LOGIN[${GITLAB_USER_LOGIN}]"
    - echo "${SAMBA_CI_CONTAINER_TAG}" > /tmp/sha1sum-tag.txt
    - diff -u bootstrap/sha1sum.txt /tmp/sha1sum-tag.txt
  script: |
    set -xueo pipefail
    ci_image_name=samba-ci-${CI_JOB_NAME}
    podman build -t ${ci_image_name} --build-arg SHA1SUM=${SAMBA_CI_CONTAINER_TAG} bootstrap/generated-dists/${CI_JOB_NAME}
    ci_image_path="${SAMBA_CI_CONTAINER_REGISTRY}/${ci_image_name}"
    timestamp=$(date +%Y%m%d%H%M%S)
    container_hash=$(podman image inspect --format='{{ .Id }}' ${ci_image_name} | cut -c 1-9)
    timestamp_tag=${SAMBA_CI_CONTAINER_TAG}-${timestamp}-${GITLAB_USER_LOGIN}-${container_hash}
    samba_repo_root=/home/samba/samba
    # Ensure we are generating the correct container that we expect to be in
    echo "${SAMBA_CI_CONTAINER_TAG}" > /tmp/sha1sum-tag.txt
    diff -u bootstrap/sha1sum.txt /tmp/sha1sum-tag.txt
    podman run --volume $(pwd):${samba_repo_root} --workdir ${samba_repo_root} ${ci_image_name} \
        /bin/bash -c "echo \"${SAMBA_CI_CONTAINER_TAG}\" > /tmp/sha1sum-tag.txt; diff -u bootstrap/sha1sum.txt /tmp/sha1sum-tag.txt"
    podman run --volume $(pwd):${samba_repo_root} --workdir ${samba_repo_root} ${ci_image_name} \
        diff -u bootstrap/sha1sum.txt /sha1sum.txt
    podman run --volume $(pwd):${samba_repo_root} --workdir ${samba_repo_root} ${ci_image_name} \
        bootstrap/template.py --sha1sum > /tmp/sha1sum-template.txt
    diff -u bootstrap/sha1sum.txt /tmp/sha1sum-template.txt
    # run smoke test with samba-o3 or samba-fuzz
    podman run --volume $(pwd):/src:ro ${ci_image_name} \
        /bin/bash -c "git config --global --add safe.directory /src/.git && git clone /src samba && cd samba && export PKG_CONFIG_PATH=/usr/lib64/compat-gnutls34/pkgconfig:/usr/lib64/compat-nettle32/pkgconfig && script/autobuild.py ${SAMBA_CI_TEST_JOB} --verbose --nocleanup --keeplogs --tail --testbase /tmp/samba-testbase"
    podman tag ${ci_image_name} ${ci_image_path}:${SAMBA_CI_CONTAINER_TAG}
    podman tag ${ci_image_name} ${ci_image_path}:${timestamp_tag}
    # We build all images, but only upload is it's not marked as broken
    test x"${SAMBA_CI_IS_BROKEN_IMAGE}" = x"yes" || { \
        podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY; \
        podman push ${ci_image_path}:${SAMBA_CI_CONTAINER_TAG}; \
        podman push ${ci_image_path}:${timestamp_tag}; \
    }
    echo "Success for ${ci_image_path}:${timestamp_tag}"
    test x"${SAMBA_CI_IS_BROKEN_IMAGE}" = x"no" || { \
         echo "The image ${CI_JOB_NAME} is marked as broken and should have failed!"; \
         echo "Replace .build_image_template_force_broken with .build_image_template!"; \
         echo "Add a .samba-o3-template section at the end of the main .gitlab-ci.yml!"; \
         /bin/false; \
    }
  only:
    variables:
      #
      # You need a custom pipeline which passes
      # SAMBA_CI_REBUILD_IMAGES="yes".
      #
      # https://gitlab.com/samba-team/devel/samba/pipelines/new
      #
      - $SAMBA_CI_REBUILD_IMAGES == "yes"

.build_image_template_force_broken:
  extends: .build_image_template
  variables:
    SAMBA_CI_IS_BROKEN_IMAGE: "yes"
  only:
    variables:
      #
      # You need a custom pipeline which passes
      # SAMBA_CI_REBUILD_BROKEN_IMAGES="yes"
      # in order to build broken images for debugging
      #
      # https://gitlab.com/samba-team/devel/samba/pipelines/new
      #
      - $SAMBA_CI_REBUILD_BROKEN_IMAGES == "yes"

ubuntu2004:
  extends: .build_image_template

ubuntu2204:
  extends: .build_image_template

debian11:
  extends: .build_image_template

debian12:
  extends: .build_image_template

fedora39:
  extends: .build_image_template

debian11-32bit:
  extends: .build_image_template
  variables:
    SAMBA_CI_TEST_JOB: "samba-32bit"

centos8s:
  extends: .build_image_template

centos7:
  extends: .build_image_template
  variables:
    # Shallow copies are not supported by git on CentOS7
    GIT_DEPTH: ""
    # We install a compat-gnutls34 package for GnuTLS >= 3.4.7
    PKG_CONFIG_PATH: /usr/lib64/compat-gnutls34/pkgconfig:/usr/lib64/compat-nettle32/pkgconfig

opensuse155:
  extends: .build_image_template