.gitlab-ci.yml 3.95 KB
Newer Older
1
2
default:
  image: "archlinux:latest"
Sven-Hendrik Haase's avatar
Sven-Hendrik Haase committed
3

4
stages:
5
  - lint
6
  - build
juadde's avatar
juadde committed
7
  - test
8
  - publish
9

Christian Rebischke's avatar
Christian Rebischke committed
10
shellcheck:
11
  stage: lint
12
13
  before_script:
    - pacman -Syu --needed --noconfirm shellcheck
Christian Rebischke's avatar
Christian Rebischke committed
14
  script:
15
    - shellcheck **/*.sh
Christian Rebischke's avatar
Christian Rebischke committed
16
17

shfmt:
18
  stage: lint
19
20
  before_script:
    - pacman -Syu --needed --noconfirm shfmt
Christian Rebischke's avatar
Christian Rebischke committed
21
  script:
22
    - shfmt -i 2 -ci -d **/*.sh
Christian Rebischke's avatar
Christian Rebischke committed
23

24
.build:
25
  stage: build
26
  before_script:
27
    - pacman -Syu --needed --noconfirm qemu-headless libisoburn
28
  script:
29
30
31
32
33
34
35
36
    - |
      # If we're building a tagged release, use the tag (without the 'v' prefix) as the
      # BUILD_VERSION. Otherwise, determine a new BUILD_VERSION.
      if [[ -n "$CI_COMMIT_TAG" ]]; then
        echo "BUILD_VERSION=${CI_COMMIT_TAG/v/}" > build.env
      else
        echo "BUILD_VERSION=$(date +%Y%m%d).$CI_JOB_ID" > build.env
      fi
37
38
    - export $(< build.env)
    - ./build-host.sh
Sven-Hendrik Haase's avatar
Sven-Hendrik Haase committed
39
  after_script:
40
    - echo "image_size_megabytes{image=\"cloudimg\"} $(du -m output/*cloudimg*qcow2)" > metrics.txt
Sven-Hendrik Haase's avatar
Sven-Hendrik Haase committed
41
42
43
    - echo "image_size_megabytes{image=\"libvirt\"} $(du -m output/*libvirt*box)" >> metrics.txt
    - echo "image_size_megabytes{image=\"virtualbox\"} $(du -m output/*virtualbox*box)" >> metrics.txt
  artifacts:
Sven-Hendrik Haase's avatar
Sven-Hendrik Haase committed
44
45
46
47
    name: "output"
    paths:
      - "output/*"
    expire_in: 2d
Sven-Hendrik Haase's avatar
Sven-Hendrik Haase committed
48
49
    reports:
      metrics: metrics.txt
50
      dotenv: build.env
51
52
53
54
55

build:
  extends: .build
  except:
    - master
56
57
    - schedules
    - tags
58

59
build:secure:
60
61
62
63
64
  extends: .build
  tags:
    - secure
  only:
    - master
65
66
    - schedules
    - tags
67

juadde's avatar
juadde committed
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
test-vagrant-boxes-format:
  stage: test
  before_script:
    - pacman -Syu --needed --noconfirm vagrant
  script:
    - vagrant box add output/Arch-Linux-x86_64-virtualbox-*.box --name archlinux-vbox
    - vagrant box add output/Arch-Linux-x86_64-libvirt-*.box --name archlinux-libvirt

test-cloudimg-qemu:
  stage: test
  variables:
    SSHPASS: passw0rd
  before_script:
    - pacman -Syu --needed --noconfirm qemu-headless cdrtools sshpass
  script:
    - |
      cat > user-data <<EOF
      #cloud-config
      password: '${SSHPASS}'
      chpasswd: { expire: False }
      ssh_pwauth: True
      EOF
    - |
      cat > meta-data <<EOF
      instance-id: iid-local01
      local-hostname: cloudimg
      EOF
    - cat user-data meta-data
    - genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
    - qemu-system-x86_64 -m 512 -net nic -net user,hostfwd=tcp::2222-:22 -drive file=$(ls output/Arch-Linux-x86_64-cloudimg-*.qcow2),if=virtio -drive file=seed.iso,if=virtio -nographic &    
    - timeout 15m sh -c "while ! sshpass -e ssh -o ConnectTimeout=2 -o StrictHostKeyChecking=no arch@localhost -p 2222 true; do sleep 1; done"

100
101
102
103
104
105
106
107
108
109
110
111
tag_release:
  stage: publish
  tags:
    - secure
  only:
    refs:
      - schedules
    variables:
      - $SCHEDULED_PUBLISH == "TRUE"
  before_script:
    - pacman -Syu --needed --noconfirm httpie
  script:
112
    - >
113
114
        export ASSET_LINKS="{ \"links\": [ \
          { \"name\": \"Vagrant Cloud Release\", \"url\": \"https://app.vagrantup.com/archlinux/boxes/archlinux/versions/$BUILD_VERSION\" }, \
115
          { \"name\": \"Browse artifacts\", \"url\": \"https://gitlab.archlinux.org/archlinux/arch-boxes/-/jobs/artifacts/v$BUILD_VERSION/browse/output?job=build:secure\" } \
116
        ]}"
117
118
119
120
121
    - http --ignore-stdin "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"
        "JOB-TOKEN:$CI_JOB_TOKEN"
        "name=v$BUILD_VERSION"
        "tag_name=v$BUILD_VERSION"
        "ref=$CI_COMMIT_SHA"
122
        "assets:=$ASSET_LINKS"
123

124
125
126
publish:
  stage: publish
  tags:
127
    - secure
128
129
  only:
    - tags
130
  before_script:
131
    - pacman -Syu --needed --noconfirm vagrant
132
  script:
133
    - vagrant cloud auth login --token "${VAGRANT_API_TOKEN}"
134
135
    - vagrant cloud auth login --check
    - vagrant cloud box show archlinux/archlinux
Sven-Hendrik Haase's avatar
Sven-Hendrik Haase committed
136
137
    - vagrant cloud publish archlinux/archlinux "${BUILD_VERSION}" libvirt output/Arch-Linux-x86_64-libvirt-*.box --release -f
    - vagrant cloud publish archlinux/archlinux "${BUILD_VERSION}" virtualbox output/Arch-Linux-x86_64-virtualbox-*.box --release -f