Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2021-06-10 15:27:02 +0200
committerAnton Hvornum <anton@hvornum.se>2021-06-10 15:27:02 +0200
commit0946b73095dffe343f3ee8f622a565b77a6e8871 (patch)
tree116f2cddb95712aa0b11f2e9c6b0f43303840a3d /.gitlab-ci.yml
parente8d38ea1a75a33d820ac32c995a80c1bc833a44d (diff)
parentfcd0acfef261ad83f0d470957f94e6b046f66411 (diff)
Merging in latest changes from master.
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r--.gitlab-ci.yml92
1 files changed, 92 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000..ca54c552
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,92 @@
+# 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.
+# 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
+ - 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 --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
+
+## 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
+publish_pypi:
+ stage: publish
+ tags:
+ - docker
+ script:
+ - pacman --noconfirm -S python python-pip
+ - python -m pip install --upgrade pip
+ - pip install setuptools wheel flit
+ - flit
+ only:
+ - tags
+ except:
+ - branches