178 lines
4.9 KiB
YAML
178 lines
4.9 KiB
YAML
image: python:3.11
|
|
|
|
variables:
|
|
WINDOWS_PYTHON_PACKAGE_NAME: "python311"
|
|
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
|
PIPENV_VENV_IN_PROJECT: 1
|
|
UPDATE_WINDOWS_DEPS:
|
|
description: "Set to \"1\" to update windows deps"
|
|
value: "0"
|
|
|
|
cache:
|
|
paths:
|
|
- .cache/pip
|
|
- .venv/
|
|
|
|
workflow:
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
when: always
|
|
- if: $CI_COMMIT_AUTHOR == "Gitlab CI <ci@gitlab.com>"
|
|
when: never
|
|
- when: always
|
|
|
|
prepare:
|
|
before_script:
|
|
- pip install setuptools_scm>=6.2
|
|
script:
|
|
- VERSION=$(python -m setuptools_scm)
|
|
- echo "VERSION=${VERSION}" | tee -a build.env
|
|
- echo "LINUX_AMD64_BINARY=fime_linux_amd64_${VERSION}" | tee -a build.env
|
|
- echo "WINDOWS_AMD64_BINARY=fime_windows_amd64_${VERSION}" | tee -a build.env
|
|
- echo "PACKAGE_REGISTRY_URL=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/fime/${VERSION}" | tee -a build.env
|
|
artifacts:
|
|
paths:
|
|
- src/fime/_version.py
|
|
reports:
|
|
dotenv: build.env
|
|
|
|
update_windows_deps:
|
|
tags:
|
|
- saas-windows-medium-amd64
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
when: never
|
|
- if: $UPDATE_WINDOWS_DEPS == "1"
|
|
when: always
|
|
- if: $CI_COMMIT_BRANCH == "main"
|
|
changes:
|
|
- Pipfile
|
|
- Pipfile.lock
|
|
when: always
|
|
before_script:
|
|
- Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
|
|
- choco install $WINDOWS_PYTHON_PACKAGE_NAME -y --no-progress
|
|
- refreshenv
|
|
- python --version
|
|
- pip install pipenv
|
|
script:
|
|
- cp Pipfile.lock Pipfile.lock.bak
|
|
- pipenv lock --dev
|
|
- cp Pipfile.lock Pipfile.lock.windows
|
|
- mv Pipfile.lock.bak Pipfile.lock
|
|
artifacts:
|
|
paths:
|
|
- Pipfile.lock.windows
|
|
|
|
# commit from linux, because setting up SSH in Windows is a fucking nightmare
|
|
commit_windows_deps:
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
when: never
|
|
- if: $UPDATE_WINDOWS_DEPS == "1"
|
|
- if: $CI_COMMIT_BRANCH == "main"
|
|
changes:
|
|
- Pipfile
|
|
- Pipfile.lock
|
|
needs:
|
|
- update_windows_deps
|
|
image: alpine
|
|
before_script:
|
|
- apk add --update git openssh-client
|
|
- eval $(ssh-agent -s)
|
|
- echo "$SSH_PRIVATE_KEY_REPO_WRITE" | ssh-add -
|
|
- git config --global user.name "Gitlab CI"
|
|
- git config --global user.email "ci@gitlab.com"
|
|
- git remote rm origin && git remote add origin "git@gitlab.com:${CI_PROJECT_PATH}.git"
|
|
script:
|
|
- dos2unix Pipfile.lock.windows
|
|
- git commit -m "Updated windows deps from CI" Pipfile.lock.windows || echo "No changes"
|
|
- GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git push origin HEAD:$CI_COMMIT_REF_NAME
|
|
|
|
package_linux:
|
|
needs:
|
|
- prepare
|
|
before_script:
|
|
- python --version
|
|
- pip install pipenv
|
|
- pipenv sync --dev
|
|
script:
|
|
- pipenv run python -m build -w
|
|
- pipenv run pyinstaller --onefile --name "${LINUX_AMD64_BINARY}" src/fime/main.py
|
|
artifacts:
|
|
paths:
|
|
- dist/*.whl
|
|
- dist/fime_linux_*
|
|
|
|
package_windows:
|
|
needs:
|
|
- prepare
|
|
tags:
|
|
- saas-windows-medium-amd64
|
|
# takes forever, so only run if it is worthwhile
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
before_script:
|
|
- Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
|
|
- choco install $WINDOWS_PYTHON_PACKAGE_NAME -y --no-progress
|
|
- refreshenv
|
|
- python --version
|
|
- pip install pipenv
|
|
- mv Pipfile.lock.windows Pipfile.lock
|
|
- pipenv sync --dev
|
|
script:
|
|
- pipenv run pyinstaller --onefile --windowed --name "${WINDOWS_AMD64_BINARY}" -i icon.ico src/fime/main.py
|
|
artifacts:
|
|
paths:
|
|
- dist/fime_windows_*
|
|
|
|
pypi_upload:
|
|
needs:
|
|
- package_linux
|
|
environment: pypi
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
before_script:
|
|
- pip install twine
|
|
script:
|
|
- twine upload dist/fime-*.whl
|
|
|
|
gitlab_package_upload:
|
|
needs:
|
|
- prepare
|
|
- package_linux
|
|
- package_windows
|
|
image: curlimages/curl:latest
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
script:
|
|
- curl --version
|
|
- |
|
|
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file "dist/${LINUX_AMD64_BINARY}" "${PACKAGE_REGISTRY_URL}/${LINUX_AMD64_BINARY}"
|
|
- |
|
|
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file "dist/${WINDOWS_AMD64_BINARY}.exe" "${PACKAGE_REGISTRY_URL}/${WINDOWS_AMD64_BINARY}.exe"
|
|
|
|
release_job:
|
|
needs:
|
|
- prepare
|
|
- gitlab_package_upload
|
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
script:
|
|
- echo "Running the release job."
|
|
release:
|
|
tag_name: $CI_COMMIT_TAG
|
|
name: 'Release $CI_COMMIT_TAG'
|
|
description: 'Release created using the release-cli.'
|
|
assets:
|
|
links:
|
|
- name: "${LINUX_AMD64_BINARY}"
|
|
url: "${PACKAGE_REGISTRY_URL}/${LINUX_AMD64_BINARY}"
|
|
filepath: "/bin/fime_linux_amd64"
|
|
link_type: package
|
|
- name: "${WINDOWS_AMD64_BINARY}.exe"
|
|
url: "${PACKAGE_REGISTRY_URL}/${WINDOWS_AMD64_BINARY}.exe"
|
|
filepath: "/bin/fime_windows_amd64.exe"
|
|
link_type: package
|