From 61df89eb916bd31efd47a142c95d93d17314a517 Mon Sep 17 00:00:00 2001
From: Darshit Shah <darnir@gnu.org>
Date: Sun, 14 Mar 2021 00:49:16 +0100
Subject: [PATCH] Updated Gitlab CI Pipeline

* .gitlab-ci.yml: COmpletely overhauled CI pipeline with dependencies
  for a faster and more robust CI.
---
 .gitlab-ci.yml | 860 ++++++++++++++++++++++++++-----------------------
 1 file changed, 453 insertions(+), 407 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d2f78924..e7649db9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,14 +1,15 @@
 # we utilize the images generated by the build-images project, to
 # speed up CI runs. We also use ccache and store config.cache
-# to speed up compilation. We include a version number in cache
-# name to allow expiration of old caches.
+# to speed up compilation.
 
 stages:
-  - stage1-testing
-  - stage2-tarball
+    - bootstrap
+    - test
+    - deploy-test
+    - deploy
 
 cache:
-  key: "$CI_JOB_NAME-ver5"
+  key: "$CI_JOB_NAME"
   paths:
     - cache/
 
@@ -28,432 +29,477 @@ after_script:
 
 variables:
   BUILD_IMAGES_PROJECT: gnuwget/build-images
-  DEBIAN_BUILD: buildenv-debian-stretch
+  CI_BASE_PATH: $CI_REGISTRY/$BUILD_IMAGES_PROJECT/wget
+  DEBIAN_OLDSTABLE_BUILD: buildenv-debian-oldstable
   DEBIAN_TESTING_BUILD: buildenv-debian-testing
+  DEBIAN_STABLE_BUILD: buildenv-debian-stable
+  CENTOS_OLDLTS_BUILD: buildenv-centos7
   FEDORA_BUILD: buildenv-fedora
-  CENTOS7_BUILD: buildenv-centos7
   MINGW_BUILD: buildenv-mingw
-  ALPINE_BUILD: buildenv-alpine
   ARCH_BUILD: buildenv-arch
-  BASIC_BUILD: buildenv-basic
   GET_SOURCES_ATTEMPTS: "3"
   GIT_DEPTH: "5"
   CONFIGURE_BASE_FLAGS: --enable-assert --cache-file cache/config.cache
-  CFLAGS_DEFAULT: -O0 -g -ggdb3
+  CFLAGS_DEFAULT: -O2 -g -ggdb3
 
 
-VPATH/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
-  script:
-    - contrib/spell-checker
-    - export CFLAGS=$CFLAGS_DEFAULT
-    - ./bootstrap --skip-po && touch .manywarnings
-    - autoreconf -ivf
-    - mkdir vpath && cd vpath
-    - ../configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
-    - make -j$(nproc)
-    - make -j$(nproc) distcheck
-    - mv wget-*.gz ..
-  tags:
-    - shared
-    - linux
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
-  artifacts:
-    expire_in: 2 weeks
-    when: on_success
-    paths:
-      - wget-*.gz
+# Debian Builds
 
-# In this build we combine
-#  * syntax-check
-#  * abi-check
-#  * build/valgrind-check
-#  * build/asan-check
-#  * build w/Werror and ubsan-check
-OpenSSL/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
-  script:
-    - echo "127.0.0.1 wgettestingserver" >>/etc/hosts
-    - cat /etc/hosts
-    - alias make="make -j$(nproc)"
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-    - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=openssl
-    - make syntax-check
-    - make check
-    - make distcheck
-    - make check-valgrind
-  tags:
-    - shared
-    - linux
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+Debian-Testing:
+    stage: bootstrap
+    image: $CI_BASE_PATH/debian:testing-bootstrap
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - ./bootstrap --skip-po && touch .manywarnings
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+    artifacts:
+        expire_in: 2 weeks
+        when: on_success
+        paths:
+            - ./
+        exclude:
+            - cache
+            - cache/*
+            - cache/**
 
-GnuTLS/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
-  script:
-    - echo "127.0.0.1 wgettestingserver" >>/etc/hosts
-    - cat /etc/hosts
-    - alias make="make -j$(nproc)"
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-    - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=gnutls
-    - make syntax-check
-    - make check
-    - make distcheck
-    - make check-valgrind
-  tags:
-    - shared
-    - linux
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+Build-Tarball:
+    stage: test
+    image: $CI_BASE_PATH/debian:testing-bootstrap
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - mkdir vpath && cd vpath
+        - ../configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache --without-ssl
+        - make -j$(nproc) syntax-check
+        - make -j$(nproc) dist
+        - mv wget-*.gz ..
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+            - vpath/*.log
+            - vpath/fuzz/*.log
+            - vpath/tests/*.log
+            - vpath/testenv/*.log
+    artifacts:
+        expire_in: 2 weeks
+        when: on_success
+        paths:
+            - wget-*.gz
 
-Minimal/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
-  script:
-    - export CFLAGS=$CFLAGS_DEFAULT
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-    - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
-      --disable-nls --without-ssl --enable-ipv6 --without-zlib --without-libiconv-prefix
-      --disable-iri --disable-ntlm --disable-pcre --without-libpsl --without-libuuid
-      --without-libintl-prefix
-    - make -j$(nproc)
-    - make -j$(nproc) check
-    - make check-valgrind
-  tags:
-    - shared
-    - linux
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+Valgrind:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
+        - make check-valgrind
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - wget-*/*.log
+            - wget-*/fuzz/*.log
+            - wget-*/tests/*.log
+            - wget-*/testenv/*.log
 
-# In this build we combine
-#  * clang
-#  * ASan, UBSan
-#  * check, syntax-check
-Sanitizers/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
-  script:
-#    - export CFLAGS="$CFLAGS_DEFAULT -Werror"
-    - export CFLAGS="$CFLAGS_DEFAULT"
-    - ./bootstrap --skip-po && touch .manywarnings
-    - autoreconf -ivf
-    - export CC="ccache clang"
-    - export UBSAN_OPTIONS=print_stacktrace=1
-    - export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-8/bin/llvm-symbolizer
-#    - export LSAN_OPTIONS=suppressions="$PWD/tests/clang-asan-suppressions"
-    - ./configure $CONFIGURE_BASE_FLAGS --enable-fsanitize-asan --enable-fsanitize-ubsan
-    - make -j$(nproc) check
-  tags:
-    - shared
-    - linux
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+Minimal:
+    stage: deploy-test
+    image: $CI_BASE_PATH/debian:testing-minimal
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - tar xvf wget-*.gz
+        - cd wget-*/
+        - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
+          --disable-nls --without-ssl --enable-ipv6 --without-zlib --without-libiconv-prefix
+          --disable-iri --disable-ntlm --disable-pcre --without-libpsl --without-libuuid
+          --without-libintl-prefix
+        - make -j$(nproc) check-valgrind
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    dependencies:
+        - Build-Tarball
+    needs: ["Build-Tarball"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - wget-*/./*.log
+            - wget-*/fuzz/*.log
+            - wget-*/tests/*.log
+            - wget-*/testenv/*.log
 
-Scan-Build/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
-  script:
-    - export CFLAGS=$CFLAGS_DEFAULT
-    - ./bootstrap --skip-po
-    - scan-build ./configure $CONFIGURE_BASE_FLAGS
-    - make -C lib -j$(nproc)
-    - scan-build -v -enable-checker nullability --status-bugs -o scan-build make -j$(nproc)
-  tags:
-    - shared
-    - linux
-  except:
-    - tags
-    - coverity-scan@gnuwget/wget
-  allow_failure: true
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - scan-build/*
+Debian-OldStable:
+    stage: deploy-test
+    image: $CI_BASE_PATH/debian:oldstable
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - tar xvf wget-*.gz
+        - cd wget-*/
+        - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
+        - make
+        - make -j$(nproc) check
+    dependencies:
+        - Build-Tarball
+    needs: ["Build-Tarball"]
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - wget-*/./*.log
+            - wget-*/fuzz/*.log
+            - wget-*/tests/*.log
+            - wget-*/testenv/*.log
 
-Valgrind/Debian:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
-  script:
-    - export CFLAGS=$CFLAGS_DEFAULT
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-    - ./configure $CONFIGURE_BASE_FLAGS --enable-valgrind-tests
-    - make -j$(nproc)
-    - make check -j$(nproc)
-  tags:
-    - shared
-    - linux
-  except:
-    - tags
-    - coverity-scan@gnuwget/wget
-  allow_failure: true
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+Debian-Stable:
+    stage: deploy-test
+    image: $CI_BASE_PATH/debian:stable
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - tar xvf wget-*.gz
+        - cd wget-*/
+        - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
+        - make
+        - make -j$(nproc) check
+    dependencies:
+        - Build-Tarball
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    needs: ["Build-Tarball"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - wget-*/./*.log
+            - wget-*/fuzz/*.log
+            - wget-*/tests/*.log
+            - wget-*/testenv/*.log
 
-Simple/Fedora:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
-  script:
-#    - export CFLAGS="$CFLAGS_DEFAULT -Werror"
-    - export CFLAGS="$CFLAGS_DEFAULT"
-    - ./bootstrap --skip-po && touch .manywarnings
-    - autoreconf -ivf
-    - ./configure $CONFIGURE_BASE_FLAGS
-    - make -j$(nproc) check
-  tags:
-    - shared
-    - linux
-  except:
-    - tags
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+CentOS-OldLTS:
+    stage: deploy-test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$CENTOS_OLDLTS_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - tar xvf wget-*.gz
+        - cd wget-*/
+        - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache
+        - make
+        - make -j$(nproc) check
+    dependencies:
+        - Build-Tarball
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    # The test suite is currently broken, so a temporary allowance
+    allow_failure: true
+    needs: ["Build-Tarball"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - wget-*/./*.log
+            - wget-*/fuzz/*.log
+            - wget-*/tests/*.log
+            - wget-*/testenv/*.log
 
-#Alpine:
-#  stage: stage1-testing
-#  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$ALPINE_BUILD
-#  script:
-#    - export CFLAGS="$CFLAGS_DEFAULT"
-#    - ./bootstrap --skip-po
-#    - ./configure $CONFIGURE_BASE_FLAGS
-#    - make -j$(nproc) check
-#  tags:
-#    - shared
-#  except:
-#    - tags
-#    - linux
-#  artifacts:
-#    expire_in: 2 weeks
-#    when: on_failure
-#    paths:
-#      - ./*.log
-#      - fuzz/*.log
-#      - tests/*.log
-#      - testenv/*.log
+TLS/OpenSSL:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - echo "127.0.0.1 wgettestingserver" >>/etc/hosts
+        - cat /etc/hosts
+        - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=openssl
+        - make -j$(nproc) distcheck
+        - make check-valgrind
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+            - fuzz/*.log
+            - tests/*.log
+            - testenv/*.log
 
-pages:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD
-  script:
-    - mkdir -p public
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-    - export CFLAGS="$CFLAGS_DEFAULT"
-    - ./configure $CONFIGURE_BASE_FLAGS
-    - make -j$(nproc) check-coverage
+TLS/GnuTLS:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - echo "127.0.0.1 wgettestingserver" >>/etc/hosts
+        - cat /etc/hosts
+        - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=gnutls
+        - make -j$(nproc) distcheck
+        - make check-valgrind
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+            - fuzz/*.log
+            - tests/*.log
+            - testenv/*.log
 
-# Tarball
-    - make dist
-    - mv wget-*.gz public/wget-latest.tar.gz
 
-# Test suite coverage report
-    - rm -rf public/coverage
-    - mv lcov public/coverage
+Sanitizers:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+#       - export CFLAGS="$CFLAGS_DEFAULT -Werror"
+        - export CFLAGS="$CFLAGS_DEFAULT"
+        - export CC="ccache clang"
+        - export UBSAN_OPTIONS=print_stacktrace=1
+        - export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-8/bin/llvm-symbolizer
+#       - export LSAN_OPTIONS=suppressions="$PWD/tests/clang-asan-suppressions"
+        - ./configure $CONFIGURE_BASE_FLAGS --enable-fsanitize-asan --enable-fsanitize-ubsan
+        - make -j$(nproc) check
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+            - fuzz/*.log
+            - tests/*.log
+            - testenv/*.log
 
-# Online Documentation
-    - make -C doc html
-    - rm -rf public/reference
-    - mv doc/wget.html public/reference
 
-# Coverage report for all our fuzz corpora
-    - make -j$(nproc) fuzz-coverage
-    - rm -rf public/fuzz-coverage
-    - mv lcov public/fuzz-coverage
-  tags:
-    - shared
-    - linux
-  artifacts:
-    when: on_success
-    paths:
-      - public
-  only:
-    - master
+# Maybe we should run scan-build on a tarball build?
+Scan-Build:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - rm .manywarnings
+        - scan-build ./configure $CONFIGURE_BASE_FLAGS
+        - make -C lib -j$(nproc)
+        - scan-build -v -enable-checker nullability --keep-empty --status-bugs -o scan-build make -j$(nproc)
+    tags:
+        - shared
+        - linux
+    except:
+        - tags
+        - coverity-scan@gnuwget/wget
+    allow_failure: true
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        when: always
+        paths:
+            - scan-build
 
+CoverageReports:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - export CFLAGS="$CFLAGS_DEFAULT"
+        - ./configure $CONFIGURE_BASE_FLAGS
+        - make -j$(nproc) check-coverage
+        - mv lcov test-coverage
+        - make -C doc html
+        - make -j$(nproc) fuzz-coverage
+        - mv lcov fuzz-coverage
+        - make dist
+        - mv wget-*.gz wget-latest.tar.gz
+    tags:
+        - shared
+        - linux
+    dependencies:
+        - Debian-Testing
+    needs: ["Debian-Testing"]
+    artifacts:
+        when: on_success
+        paths:
+            - wget-latest.tar.gz
+            - test-coverage/
+            - fuzz-coverage/
+    only:
+        - master
+
+ArchLinux:
+    stage: test
+    image: $CI_BASE_PATH/archlinux
+    script:
+        - export CFLAGS="$CFLAGS_DEFAULT"
+        - ./bootstrap --skip-po && touch .manywarnings
+        - ./configure $CONFIGURE_BASE_FLAGS
+        - make -j$(nproc)
+        - make check -j$(nproc)
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    needs: []
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+            - fuzz/*.log
+            - tests/*.log
+            - testenv/*.log
+
+Fedora:
+    stage: test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
+    script:
+        - export CFLAGS="$CFLAGS_DEFAULT"
+        - ./bootstrap --skip-po && touch .manywarnings
+        - ./configure $CONFIGURE_BASE_FLAGS
+        - make -j$(nproc) check
+    tags:
+        - shared
+        - linux
+    except:
+        - coverity-scan@gnuwget/wget
+    needs: []
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - ./*.log
+            - fuzz/*.log
+            - tests/*.log
+            - testenv/*.log
 
 MinGW64:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD
-  script:
-#    - apt-get install libhttp-daemon-perl libio-socket-ssl-perl python3
-    - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc &&
-      echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-#    - cp pthread_sigmask.c.mingw lib/pthread_sigmask.c
-    - export CC="ccache $PREFIX-gcc"
-    - export GCCLIB=$(dirname $(find /usr/lib/gcc/$PREFIX -name libgcc_s_seh-1.dll|grep posix))
-    - export WINEPATH="$WINEPATH;/usr/$PREFIX/bin;/usr/$PREFIX/lib;$PWD/libwget/.libs;$GCCLIB"
-    - echo "WINEPATH=$WINEPATH"
-    - LIBS="-ldl -lpsapi" ./configure $CONFIGURE_BASE_FLAGS --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared
-    - make -j$(nproc)
-    - make clean
-    - LIBS="-ldl -lpsapi" ./configure $CONFIGURE_BASE_FLAGS --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared --disable-threads
-    - make -j$(nproc)
-    - cp -p src/wget.exe src/wget
-    - make check -j$(nproc) LOG_COMPILER=wine
-  tags:
-    - shared
-    - linux
-  except:
-    - tags
-    - coverity-scan@gnuwget/wget
-  allow_failure: true
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./config.h
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
-
-Build/Arch:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$ARCH_BUILD
-  script:
-    - export CFLAGS="$CFLAGS_DEFAULT"
-    - ./bootstrap --skip-po && touch .manywarnings
-    - autoreconf -vif
-    - ./configure $CONFIGURE_BASE_FLAGS
-    - make -j$(nproc)
-    - make check -j$(nproc)
-  tags:
-    - shared
-    - linux
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - ./*.log
-      - fuzz/*.log
-      - tests/*.log
-      - testenv/*.log
+    stage: deploy-test
+    image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD
+    variables:
+        GIT_STRATEGY: none
+    script:
+        - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc &&
+          echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
+        - tar xvf wget-*.gz
+        - cd wget-*/
+        - export CFLAGS=$CFLAGS_DEFAULT
+        - export CC="ccache $PREFIX-gcc"
+        - export GCCLIB=$(dirname $(find /usr/lib/gcc/$PREFIX -name libgcc_s_seh-1.dll|grep posix))
+        - export WINEPATH="$WINEPATH;/usr/$PREFIX/bin;/usr/$PREFIX/lib;$PWD/libwget/.libs;$GCCLIB"
+        - echo "WINEPATH=$WINEPATH"
+        - LIBS="-ldl -lpsapi" ./configure $CONFIGURE_BASE_FLAGS --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared
+        - make -j$(nproc)
+        - cp -p src/wget.exe src/wget
+        - make check -j$(nproc) LOG_COMPILER=wine
+    dependencies:
+        - Build-Tarball
+    needs: ["Build-Tarball"]
+    tags:
+        - shared
+        - linux
+    except:
+        - tags
+        - coverity-scan@gnuwget/wget
+    allow_failure: true
+    artifacts:
+        expire_in: 2 weeks
+        when: on_failure
+        paths:
+            - wget-*/./config.h
+            - wget-*/./*.log
+            - wget-*/fuzz/*.log
+            - wget-*/tests/*.log
+            - wget-*/testenv/*.log
 
 
-# Test building from tarball in a minimal non-dev environment
-Tarball:
-  stage: stage2-tarball
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$BASIC_BUILD
-  variables:
-    GIT_STRATEGY: none
-  script:
-    - apk add perl
-    # remove all files from git repo
-    - mv wget-*.gz /tmp
-    - rm -rf * .git* .travis*
-    - mv /tmp/wget-*.gz .
-    # unpack and build from tarball
-    - tar xvf wget-*.gz
-    - cd wget-*
-    - unset CC
-    - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=no
-    - make -j$(nproc)
-    # make check doesn't work due to incomplete perl installation
-    # - make -j$(nproc) check
-    # check if essential files are accidentally cleaned
-    - make clean
-    - make -j$(nproc)
-  tags:
-    - shared
-    - linux
-  dependencies:
-    - VPATH/Debian
-  except:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 2 weeks
-    when: on_failure
-    paths:
-      - wget-*/*.log
-      - wget-*/fuzz/*.log
-      - wget-*/tests/*.log
-      - wget-*/testenv/*.log
-
-coverity:
-  stage: stage1-testing
-  image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
-  script:
-    - wget https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_SCAN_TOKEN&project=$COVERITY_SCAN_PROJECT_NAME" -O /tmp/coverity_tool.tgz
-    - tar xfz /tmp/coverity_tool.tgz
-    - ./bootstrap --skip-po
-    - autoreconf -ivf
-    - CFLAGS="-g -Og" ./configure --cache-file cache/config.cache --disable-doc
-    - cov-analysis-linux64-*/bin/cov-build --dir cov-int make -j$(nproc)
-    - tar cfz cov-int.tar.gz cov-int
-    - curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME
-      --form token=$COVERITY_SCAN_TOKEN --form email=tim.ruehsen@gmx.de
-      --form file=@cov-int.tar.gz --form version="`git describe --tags`"
-      --form description="CI build"
-  tags:
-    - shared
-    - linux
-  only:
-    - coverity-scan@gnuwget/wget
-  artifacts:
-    expire_in: 1 week
-    when: on_failure
-    paths:
-      - cov-int/*.txt
+pages:
+    stage: deploy
+    script:
+        - mkdir -p public
+        - rm -rf public/reference public/coverage public/fuzz-coverage
+        - mv wget-latest.tar.gz public/
+        - mv test-coverage public/coverage
+        - mv fuzz-coverage public/fuzz-coverage
+        - mv scan-build public/scan-build
+    dependencies:
+        - CoverageReports
+        - Scan-Build
+    artifacts:
+        when: on_success
+        paths:
+            - public
+    only:
+        - master