# 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/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