From 35b9cf43af71960a4b89f8608a55ff91f186bffa Mon Sep 17 00:00:00 2001 From: Dylan Taylor Date: Wed, 9 Jun 2021 22:31:05 -0400 Subject: Initial port of GitHub workspaces to GitLab CI/CD --- .gitlab-ci.yml | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 .gitlab-ci.yml (limited to '.gitlab-ci.yml') diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..c57892db --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,83 @@ +# This file contains GitLab CI/CD configuration for the ArchInstall project. +# It defines several jobs that get run when a new commit is made, and is comparable to the GitHub workflows. +# All jons will be run in the official archlinux container image, so we will declare that here. +# There is an expectation that a runner exists that has the --privileged flag enabled for the build ISO job to run correctly. +# These jobs should leverage the same tag as that runner. If necessary, change the tag from 'docker' to the one it uses. + +image: archlinux:latest + +stages: + - lint + - test + - build + - publish + +mypy: + stage: lint + tags: + - docker + script: + - pacman --noconfirm -Syu python mypy + - mypy . --ignore-missing-imports || exit 0 + +flake8: + stage: lint + tags: + - docker + script: + - pacman --noconfirm -Syu python python-pip + - python -m pip install --upgrade pip + - pip install flake8 + - flake8 . --count --select=E9,F63,F7 --show-source --statistics + - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + +# We currently do not have unit tests implemented but this stage is written in anticipation of their future usage. +# When a stage name is preceeded with a '.' it's treated as "disabled" by GitLab and is not executed, so it's fine for it to be declared. +.pytest: + stage: test + tags: + - docker + script: + - pacman --noconfirm -Syu python python-pip + - python -m pip install --upgrade pip + - pip install pytest + - pytest + +# This stage might fail with exit code 137 on a shared runner. This is probably due to the CPU/memory consumption needed to run the build. +build_iso: + stage: build + tags: + - docker + script: + - pwd + - find . + - cat /etc/os-release + - mkdir -p /tmp/archlive/airootfs/root/archinstall-git; cp -r . /tmp/archlive/airootfs/root/archinstall-git + - echo "pip uninstall archinstall -y; cd archinstall-git; python setup.py install" > /tmp/archlive/airootfs/root/.zprofile + - echo "echo \"This is an unofficial ISO for development and testing of archinstall. No support will be provided.\"" >> /tmp/archlive/airootfs/root/.zprofile + - echo "echo \"This ISO was built from Git SHA $CI_COMMIT_SHA\"" >> /tmp/archlive/airootfs/root/.zprofile + - echo "echo \"Type archinstall to launch the installer.\"" >> /tmp/archlive/airootfs/root/.zprofile + - cat /tmp/archlive/airootfs/root/.zprofile + - pacman -Sy; pacman --noconfirm -S git archiso + - cp -r /usr/share/archiso/configs/releng/* /tmp/archlive + - echo -e "git\npython\npython-pip\npython-setuptools" >> /tmp/archlive/packages.x86_64 + - find /tmp/archlive + - cd /tmp/archlive; mkarchiso -v -w work/ -o out/ ./ + artifacts: + name: "Arch Live ISO" + paths: + - /tmp/archlive/out/*.iso + expire_in: 1 week + +## The following CI/CD variables need to be set to the PyPi username and password in the GitLab project's settings for this stage to work. +# * FLIT_USERNAME +# * FLIT_PASSWORD +publish_pypi: + stage: publish + tags: + - docker + script: + - pacman -Sy; pacman --noconfirm -S python python-pip + - python -m pip install --upgrade pip + - pip install setuptools wheel flit + - flit -- cgit v1.2.3-54-g00ecf From e5e818a52a30bc3d552b127455791107046e558b Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Thu, 10 Jun 2021 07:14:51 -0400 Subject: Only run publish_pypi when a tag is created on the master branch --- .gitlab-ci.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to '.gitlab-ci.yml') diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c57892db..ca54c552 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,15 @@ # This file contains GitLab CI/CD configuration for the ArchInstall project. # It defines several jobs that get run when a new commit is made, and is comparable to the GitHub workflows. -# All jons will be run in the official archlinux container image, so we will declare that here. # There is an expectation that a runner exists that has the --privileged flag enabled for the build ISO job to run correctly. # These jobs should leverage the same tag as that runner. If necessary, change the tag from 'docker' to the one it uses. +# All jobs will be run in the official archlinux container image, so we will declare that here. image: archlinux:latest +# This can be used to handle common actions. In this case, we do a pacman -Sy to make sure repos are ready to use. +before_script: + - pacman -Sy + stages: - lint - test @@ -58,7 +62,7 @@ build_iso: - echo "echo \"This ISO was built from Git SHA $CI_COMMIT_SHA\"" >> /tmp/archlive/airootfs/root/.zprofile - echo "echo \"Type archinstall to launch the installer.\"" >> /tmp/archlive/airootfs/root/.zprofile - cat /tmp/archlive/airootfs/root/.zprofile - - pacman -Sy; pacman --noconfirm -S git archiso + - pacman --noconfirm -S git archiso - cp -r /usr/share/archiso/configs/releng/* /tmp/archlive - echo -e "git\npython\npython-pip\npython-setuptools" >> /tmp/archlive/packages.x86_64 - find /tmp/archlive @@ -69,6 +73,7 @@ build_iso: - /tmp/archlive/out/*.iso expire_in: 1 week +## This job only runs when a tag is created on the master branch. This is because we do not want to try to publish to PyPi every time we commit. ## The following CI/CD variables need to be set to the PyPi username and password in the GitLab project's settings for this stage to work. # * FLIT_USERNAME # * FLIT_PASSWORD @@ -77,7 +82,11 @@ publish_pypi: tags: - docker script: - - pacman -Sy; pacman --noconfirm -S python python-pip + - pacman --noconfirm -S python python-pip - python -m pip install --upgrade pip - pip install setuptools wheel flit - flit + only: + - tags + except: + - branches -- cgit v1.2.3-54-g00ecf