From 3233b92fba4afa9fb84f9ea0a3541715ebe73b20 Mon Sep 17 00:00:00 2001 From: CodeByMrFinchum Date: Sun, 9 Feb 2025 13:21:29 +0100 Subject: [PATCH 1/6] patch: Added classifiers for pypi --- CHANGELOG.md | 11 +++++++++-- pyproject.toml | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee5de51..d1d80e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,14 @@ # Changelog -## 1.0.0: -### Refactoring +## 1.0.x + +### 1.0.2: Added Classifier +- Added classifiers in `pyproject.toml` for PyPI. + +### 1.0.1: Contribution +- Added a contribution section in the README for Mr. Finch. + +### **1.0.0** Refactoring - Added function descriptions for better clarity and maintainability. - Introduced guidelines for each function, defining objectives and expected behavior. diff --git a/pyproject.toml b/pyproject.toml index 1ee9c4e..85776ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,8 @@ readme = "pip_README.md" requires-python = ">=3.8" dependencies = ["piexif", "pillow"] classifiers = [ + "Development Status :: 5 - Production/Stable", + "Topic :: Software Development :: Libraries :: Python Modules", "Programming Language :: Python :: 3", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Operating System :: OS Independent", @@ -18,6 +20,9 @@ classifiers = [ [project.urls] Source = "https://gitlab.com/CodeByMrFinchum/optima35" +Documentation = "https://gitlab.com/CodeByMrFinchum/optima35/-/blob/main/README.md" +Changelog = "https://gitlab.com/CodeByMrFinchum/optima35/-/blob/main/CHANGELOG.md" + [project.scripts] optima35 = "optima35.__main__:main" From e2cef24b658af361bc505a90a143fa5701eba70b Mon Sep 17 00:00:00 2001 From: "Mr. Finchum" Date: Mon, 24 Mar 2025 15:24:14 +0100 Subject: [PATCH 2/6] patch: adjusted pyproject.toml --- CHANGELOG.md | 8 +++++--- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1d80e2..a4ceb7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,16 @@ # Changelog ## 1.0.x +### 1.0.3 Patch: Adjusted pyproject.toml (25.03.24) +- Added <4.0 python version -### 1.0.2: Added Classifier +### 1.0.2: Added Classifier (25.02.09) - Added classifiers in `pyproject.toml` for PyPI. -### 1.0.1: Contribution +### 1.0.1: Contribution (25.01.28) - Added a contribution section in the README for Mr. Finch. -### **1.0.0** Refactoring +### **1.0.0** Refactoring (25.01.28) - Added function descriptions for better clarity and maintainability. - Introduced guidelines for each function, defining objectives and expected behavior. diff --git a/pyproject.toml b/pyproject.toml index 85776ec..1be289b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ dynamic = ["version"] authors = [{ name = "Mr. Finchum" }] description = "optima35 is a package to modify images, using pillow and piexif." readme = "pip_README.md" -requires-python = ">=3.8" +requires-python = ">=3.8, <4.0" dependencies = ["piexif", "pillow"] classifiers = [ "Development Status :: 5 - Production/Stable", From 41d81c4f7cc1d9b5cbb49eb00e4fedc7e5c68a10 Mon Sep 17 00:00:00 2001 From: Mr Finchum Date: Fri, 11 Apr 2025 12:51:26 +0200 Subject: [PATCH 3/6] ci: switching from gitlab-ci to woodpecker. --- .gitlab-ci.yml | 69 --------------------- .gitlab-ci/git/create_tag.yml | 15 ----- .gitlab-ci/versioning/gitversion.yml | 31 ---------- .woodpecker/woodpecker_ci.yml | 92 ++++++++++++++++++++++++++++ README.md | 2 + 5 files changed, 94 insertions(+), 115 deletions(-) delete mode 100644 .gitlab-ci.yml delete mode 100644 .gitlab-ci/git/create_tag.yml delete mode 100644 .gitlab-ci/versioning/gitversion.yml create mode 100644 .woodpecker/woodpecker_ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 30a2cc5..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,69 +0,0 @@ ---- -include: - - local: .gitlab-ci/versioning/gitversion.yml - - local: .gitlab-ci/git/create_tag.yml - -stages: - - build - - release - -gitversion: - extends: .versioning:gitversion - stage: .pre - tags: - - gitlab-org-docker - rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - -build: - stage: build - image: python:3.9.21 - tags: - - gitlab-org-docker - rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - needs: - - job: gitversion - artifacts: true - script: - - sed -i "s/1.0.0/${GitVersion_MajorMinorPatch}/" src/optima35/__init__.py - - cat src/optima35/__init__.py - - python3 -m pip install build - - python3 -m build - artifacts: - paths: - - dist/* - expire_in: 1 day - -publish: - stage: release - image: python:3.9.21 - tags: - - gitlab-org-docker - rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - variables: - TWINE_USERNAME: "__token__" - TWINE_PASSWORD: $TWINE_API - needs: - - job: build - artifacts: true - script: - - python3 -m pip install twine - - python3 -m twine upload dist/* - -create_tag: - extends: .git:create_tag - stage: release - tags: - - gitlab-org-docker - variables: - VERSION: $GitVersion_SemVer - TOKEN: $GITLAB_TOKEN - needs: - - job: gitversion - artifacts: true - rules: - - if: $CI_COMMIT_TAG - when: never # Do not run this job when a tag is created manually - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch diff --git a/.gitlab-ci/git/create_tag.yml b/.gitlab-ci/git/create_tag.yml deleted file mode 100644 index 2c1afd7..0000000 --- a/.gitlab-ci/git/create_tag.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- - -.git:create_tag: - image: alpine:3.21 - variables: - GIT_STRATEGY: clone - GIT_DEPTH: 0 - GIT_LFS_SKIP_SMUDGE: 1 - VERSION: '' - TOKEN: '' # Token with push privileges - script: - - apk add git - - git remote set-url origin https://oauth2:$TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH - - git tag $VERSION - - git push origin tag $VERSION diff --git a/.gitlab-ci/versioning/gitversion.yml b/.gitlab-ci/versioning/gitversion.yml deleted file mode 100644 index dbbc149..0000000 --- a/.gitlab-ci/versioning/gitversion.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -.versioning:gitversion: - image: - name: mcr.microsoft.com/dotnet/sdk:9.0 - variables: - GIT_STRATEGY: clone - GIT_DEPTH: 0 # force a deep/non-shallow fetch need by gitversion - GIT_LFS_SKIP_SMUDGE: 1 - cache: [] # caches and before / after scripts can mess things up - script: - - | - dotnet tool install --global GitVersion.Tool --version 5.* - export PATH="$PATH:/root/.dotnet/tools" - - dotnet-gitversion -output buildserver - - # We could just collect the output file gitversion.properties (with artifacts:report:dotenv: gitversion.properties as it is already in DOTENV format, - # however it contains ~33 variables which unnecessarily consumes many of the 50 max DOTENV variables of the free GitLab version. - # Limits are higher for licensed editions, see https://docs.gitlab.com/ee/ci/yaml/artifacts_reports.html#artifactsreportsdotenv - grep 'GitVersion_LegacySemVer=' gitversion.properties >> gitversion.env - grep 'GitVersion_SemVer=' gitversion.properties >> gitversion.env - grep 'GitVersion_FullSemVer=' gitversion.properties >> gitversion.env - grep 'GitVersion_Major=' gitversion.properties >> gitversion.env - grep 'GitVersion_Minor=' gitversion.properties >> gitversion.env - grep 'GitVersion_Patch=' gitversion.properties >> gitversion.env - grep 'GitVersion_MajorMinorPatch=' gitversion.properties >> gitversion.env - grep 'GitVersion_BuildMetaData=' gitversion.properties >> gitversion.env - artifacts: - reports: - # propagates variables into the pipeline level - dotenv: gitversion.env diff --git a/.woodpecker/woodpecker_ci.yml b/.woodpecker/woodpecker_ci.yml new file mode 100644 index 0000000..0cc947f --- /dev/null +++ b/.woodpecker/woodpecker_ci.yml @@ -0,0 +1,92 @@ +steps: + - name: gitversion + depends_on: [] # nothing start emititly + when: + event: push + branch: main + image: mcr.microsoft.com/dotnet/sdk:9.0 + environment: + CI_TOKEN: + from_secret: CI_TOKEN + commands: + - git remote set-url origin https://CodeByMrFinchum:$CI_TOKEN@code.boxyfoxy.net/$CI_REPO.git + - git fetch --unshallow --tags + - apt-get update && apt-get install -y jq + - dotnet tool install --global GitVersion.Tool --version 5.* + - export PATH="$PATH:/root/.dotnet/tools" + - dotnet-gitversion -output json > version.json + - ls + - cat version.json + - | + echo "GitVersion_SemVer=$(jq -r '.SemVer' version.json)" >> gitversion.env + echo "GitVersion_LegacySemVer=$(jq -r '.LegacySemVer' version.json)" >> gitversion.env + echo "GitVersion_FullSemVer=$(jq -r '.FullSemVer' version.json)" >> gitversion.env + echo "GitVersion_Major=$(jq -r '.Major' version.json)" >> gitversion.env + echo "GitVersion_Minor=$(jq -r '.Minor' version.json)" >> gitversion.env + echo "GitVersion_Patch=$(jq -r '.Patch' version.json)" >> gitversion.env + echo "GitVersion_MajorMinorPatch=$(jq -r '.MajorMinorPatch' version.json)" >> gitversion.env + echo "GitVersion_BuildMetaData=$(jq -r '.BuildMetaData' version.json)" >> gitversion.env + + - name: tagging + depends_on: [gitversion] + when: + event: push + branch: main + image: alpine/git + environment: + CI_TOKEN: + from_secret: CI_TOKEN + commands: + - ls + - cat gitversion.env + - git config --global user.email "ci@noreply.boxyfoxy.net" + - git config --global user.name "CI Bot" + - git remote set-url origin https://CodeByMrFinchum:$${CI_TOKEN}@code.boxyfoxy.net/$${CI_REPO}.git + - . gitversion.env + - git tag $GitVersion_SemVer + - git push origin tag $GitVersion_SemVer + + - name: build + depends_on: [gitversion, tagging] + when: + event: push + branch: main + image: python:3.9.21 + commands: + - ls + - cat gitversion.env + - export $(cat gitversion.env | xargs) + - sed -i "s/1.0.0/${GitVersion_SemVer}/" src/optima35/__init__.py + - cat src/optima35/__init__.py + - python3 -m pip install build + - python3 -m build + + - name: publish_pypi + depends_on: [gitversion, tagging, build] + when: + event: push + branch: main + image: python:3.9.21 + environment: + TWINE_PASSWORD: + from_secret: TWINE_API + TWINE_USERNAME: "__token__" + commands: + - ls + - python3 -m pip install twine + - python3 -m twine upload dist/* + + - name: publish_forgejo + depends_on: [gitversion, tagging, build] + when: + event: push + branch: main + image: python:3.9.21 + environment: + TWINE_PASSWORD: + from_secret: PKG_TOKEN + TWINE_USERNAME: "CodeByMrFinchum" + commands: + - ls + - python3 -m pip install twine + - python3 -m twine upload --repository-url https://code.boxyfoxy.net/api/packages/CodeByMrFinchum/pypi dist/* diff --git a/README.md b/README.md index ebd7622..0b6d4d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # **OPTIMA35** +Developed on my [forgejo instance](https://code.boxyfoxy.net/CodeByMrFinchum), [GitLab](https://gitlab.com/CodeByMrFinchum) is used as backup. + **OPTIMA35** stands for **Organizing, Processing, Tweaking Images, and Modifying Analogs from 35mm Film**. It is a Python package designed to simplify image editing and metadata management, providing an interface/API for handling image and EXIF data seamlessly. While OPTIMA35 was created with analog photography in mind—where scanned images often lack proper EXIF data or retain only scanner metadata—it is equally useful for digital images. Adding or managing EXIF data is invaluable for organizing private photo collections, making your photo library more structured and searchable. OPTIMA35 is a core package that acts as an interface for libraries like Pillow and piexif, simplifying image manipulation tasks. While it modifies images one at a time, it requires a dedicated program for flexible and batch processing. For a user-friendly graphical experience, consider using [OptimaLab35](https://gitlab.com/CodeByMrFinchum/OptimaLab35), a GUI designed specifically for OPTIMA35, also developed by me. From 9535b869af86730a8faf8837e6cc4f124e919371 Mon Sep 17 00:00:00 2001 From: Mr Finchum Date: Fri, 11 Apr 2025 13:03:08 +0200 Subject: [PATCH 4/6] fix: fixes version insection --- .woodpecker/woodpecker_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/woodpecker_ci.yml b/.woodpecker/woodpecker_ci.yml index 0cc947f..d77a4c6 100644 --- a/.woodpecker/woodpecker_ci.yml +++ b/.woodpecker/woodpecker_ci.yml @@ -56,7 +56,7 @@ steps: - ls - cat gitversion.env - export $(cat gitversion.env | xargs) - - sed -i "s/1.0.0/${GitVersion_SemVer}/" src/optima35/__init__.py + - sed -i "s/1.0.0/$GitVersion_SemVer/" src/optima35/__init__.py - cat src/optima35/__init__.py - python3 -m pip install build - python3 -m build From 9869a9e419b61f6fba6dff9c6a971c216fbe8d18 Mon Sep 17 00:00:00 2001 From: Mr Finchum Date: Fri, 11 Apr 2025 13:09:48 +0200 Subject: [PATCH 5/6] patch: added missing entry. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4ceb7e..6679ae2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 1.1.x: Migration (25.04.11) +- Migrated from GitLab to my forgejo instance for development. + +--- + ## 1.0.x ### 1.0.3 Patch: Adjusted pyproject.toml (25.03.24) - Added <4.0 python version From daba1108052c5e11c67f2fda7dceee80f6b00037 Mon Sep 17 00:00:00 2001 From: Mr Finchum Date: Fri, 11 Apr 2025 13:17:54 +0200 Subject: [PATCH 6/6] patch: adjusting pip readme. --- pip_README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pip_README.md b/pip_README.md index afe32fa..2f7312b 100644 --- a/pip_README.md +++ b/pip_README.md @@ -1,2 +1,2 @@ -Uses pillow and piexif to modify images, see [optima35](https://gitlab.com/CodeByMrFinchum/optima35) gitlab for more information. +Uses pillow and piexif to modify images, see my [forgejo instance](https://code.boxyfoxy.net/CodeByMrFinchum) or [GitLab](https://gitlab.com/CodeByMrFinchum)(backup) for more information. Install [OptimaLab35](https://pypi.org/project/OptimaLab35/) in pip for a GUI.