Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Push tests
# run-name: ${{ github.actor }} push tests

on:
push:
pull_request:

jobs:
test:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
# - python: 2.7.18
# plone: 4.3
# - python: 3.7.14
# plone: 5.2
# - python: 3.10.11
# plone: "6.0"
- python: 3.13.1
plone: "6.1"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up pyenv and Python
uses: "gabrielfalcao/pyenv-action@v18"
with:
default: "${{ matrix.python }}"
- name: Setup Env
run: |
pip install --upgrade pip
pip install -r requirements-${{ matrix.plone }}.txt
- name: Cache eggs
uses: actions/cache@v4
env:
cache-name: cache-eggs
with:
path: ~/buildout-cache/eggs
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ matrix.python }}-${{ matrix.plone }}
- name: buildout
run: |
sed -ie "s#test.cfg#test-${{matrix.plone}}.cfg#" gha.cfg
buildout -c gha.cfg annotate
buildout -c gha.cfg
- name: test
run: |
bin/test -t !robot
coverage:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- python: 3.13.1
plone: "6.1"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up pyenv and Python
uses: "gabrielfalcao/pyenv-action@v18"
with:
default: "${{ matrix.python }}"
- name: Setup Env
run: |
pip install --upgrade pip
pip install -r requirements-${{matrix.plone}}.txt
pip install -U coveralls coverage
- name: Cache eggs
uses: actions/cache@v4
env:
cache-name: cache-eggs
with:
path: ~/buildout-cache/eggs
key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ matrix.python }}-${{ matrix.plone }}
- name: buildout
run: |
sed -ie "s#test.cfg#test-${{matrix.plone}}.cfg#" gha.cfg
buildout -c gha.cfg
- name: code-analysis
run: |
bin/code-analysis
- name: test coverage
run: |
coverage run bin/test -t !robot
- name: Publish to Coveralls
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
coveralls --service=github
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*.pyc
.installed.cfg
.mr.developer.cfg
.plone.versioncheck.tracked.json
.project
.pydevproject
.settings/
Expand All @@ -17,3 +18,5 @@ src/*
!src/imio
var/
.coverage
pyvenv.cfg
.idea
5 changes: 5 additions & 0 deletions .isort.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[settings]
force_alphabetical_sort = True
force_single_line = True
lines_after_imports = 2
line_length = 120
8 changes: 4 additions & 4 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Changelog
=========

1.39 (unreleased)
-----------------

- Nothing changed yet.
2.0 (unreleased)
----------------

- Add Plone 6.1 compatibility, drop Plone 4 / 5 compatibility
[laulaz]

1.38 (2024-10-02)
-----------------
Expand Down
102 changes: 87 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,22 +1,94 @@
#!/usr/bin/make
#
all: run
# pyenv is a requirement, with 3.13+ python versions, and virtualenv installed in each version
# plone parameter must be passed to create environment 'make setup plone=6.1' or after a make cleanall
# The original Makefile can be found on https://github.com/IMIO/scripts-buildout

.PHONY: bootstrap
bootstrap:
virtualenv-2.7 --no-site-packages .
./bin/pip install -r requirements.txt
SHELL=/bin/bash
plones=6.1
b_o=
old_plone=$(shell [ -e .plone-version ] && cat .plone-version)

ifeq (, $(shell which pyenv))
$(error "pyenv command not found! Aborting")
endif

ifndef plone
ifeq (,$(filter setup,$(MAKECMDGOALS)))
plone=$(old_plone)
endif
endif

ifneq ($(wildcard bin/instance),)
b_o=-N
endif

ifndef python
ifeq ($(plone),6.1)
python=3.13
endif
endif

all: buildout

.PHONY: help
help:
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n\nTargets:\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-10s\033[0m %s\n", $$1, $$2 }' $(MAKEFILE_LIST)

.python-version: ## Setups pyenv version
@pyenv local `pyenv versions |grep " $(python)" |tail -1 |xargs`
@echo "Local pyenv version is `cat .python-version`"
@ if [[ `pyenv which virtualenv` != `pyenv prefix`* ]] ; then echo "You need to install virtualenv in `cat .python-version` pyenv python (pip install virtualenv)"; exit 1; fi

bin/buildout: .python-version ## Setups environment
virtualenv .
./bin/pip install --upgrade pip
./bin/pip install -r requirements-$(plone).txt
@echo "$(plone)" > .plone-version

.PHONY: setup
setup: oneof-plone backup cleanall bin/buildout restore ## Setups environment

.PHONY: buildout
buildout:
if ! test -f bin/buildout;then make bootstrap;fi
bin/buildout -t 5
buildout: oneof-plone bin/buildout ## Runs setup and buildout
rm -f .installed.cfg .mr.developer.cfg
bin/buildout -t 5 -c test-$(plone).cfg ${b_o}

.PHONY: run
run:
if ! test -f bin/instance1;then make buildout;fi
bin/instance1 fg
.PHONY: test
test: oneof-plone bin/buildout ## run bin/test without robot
# can be run by example with: make test opt='-t "settings"'
bin/test -t \!robot ${opt}

.PHONY: cleanall
cleanall:
rm -fr bin develop-eggs downloads eggs lib parts .installed.cfg
cleanall: ## Cleans all installed buildout files
rm -fr bin include lib local share develop-eggs downloads eggs parts .installed.cfg .mr.developer.cfg .python-version pyvenv.cfg

.PHONY: backup
backup: ## Backups db files
@if [ '$(old_plone)' != '' ] && [ -f var/filestorage/Data.fs ]; then mv var/filestorage/Data.fs var/filestorage/Data.fs.$(old_plone); mv var/blobstorage var/blobstorage.$(old_plone); fi

.PHONY: restore
restore: ## Restores db files
@if [ '$(plone)' != '' ] && [ -f var/filestorage/Data.fs.$(plone) ]; then mv var/filestorage/Data.fs.$(plone) var/filestorage/Data.fs; mv var/blobstorage.$(plone) var/blobstorage; fi

.PHONY: which-python
which-python: oneof-plone ## Displays versions information
@echo "current plone = $(old_plone)"
@echo "current python = `cat .python-version`"
@echo "plone var = $(plone)"
@echo "python var = $(python)"

.PHONY: vcr
vcr: ## Shows requirements in checkversion-r.html
@bin/versioncheck -rbo checkversion-r-$(plone).html test-$(plone).cfg

.PHONY: vcn
vcn: ## Shows newer packages in checkversion-n.html
@bin/versioncheck -npbo checkversion-n-$(plone).html test-$(plone).cfg

.PHONY: guard-%
guard-%:
@ if [ "${${*}}" = "" ]; then echo "You must give a value for variable '$*' : like $*=xxx"; exit 1; fi

.PHONY: oneof-%
oneof-%:
@ if ! echo "${${*}s}" | tr " " '\n' |grep -Fqx "${${*}}"; then echo "Invalid '$*' parameter ('${${*}}') : must be one of '${${*}s}'"; exit 1; fi
99 changes: 80 additions & 19 deletions base.cfg
Original file line number Diff line number Diff line change
@@ -1,38 +1,99 @@
[buildout]
show-picked-versions = true
allow-picked-versions = false
package-name = imio.migrator
package-extras = [test]

extends =
http://dist.plone.org/release/4.3-latest/versions.cfg
sources.cfg
versions.cfg
https://raw.githubusercontent.com/collective/buildout.plonetest/master/qa.cfg
checkouts.cfg

extensions +=
extensions =
mr.developer
plone.versioncheck

parts =
instance1
parts +=
instance
omelette
ploneversioncheck
createcoverage
robot
# coverage
# test-coverage
# plone-helper-scripts

develop = .

eggs +=
Plone
Pillow
# Products.PDBDebugMode
# collective.profiler
# ipdb
pdbp
# plone.reload

package-extras +=
pdbp

always-checkout = force
auto-checkout +=

[instance1]
recipe = plone.recipe.zope2instance
user = admin:admin
http-address = 8081
eggs =
[instance]
environment-vars +=
PYTHONBREAKPOINT pdbp.set_trace
eggs +=
${buildout:eggs}
imio.migrator
zcml =
environment-vars = zope_i18n_compile_mo_files true
zcml +=

[test]
initialization +=
os.environ['PYTHONBREAKPOINT'] = 'pdbp.set_trace'

[omelette]
recipe = collective.recipe.omelette
eggs = ${test:eggs}

[ploneversioncheck]
recipe = zc.recipe.egg
eggs = plone.versioncheck

[code-analysis]
recipe = plone.recipe.codeanalysis
pre-commit-hook = True
return-status-codes = True
directory = ${buildout:directory}/src/imio/migrator
flake8-ignore = E123,E124,E501,E126,E127,E128,W391,C901,W503,W504
flake8-extensions =
flake8-isort

[robot]
recipe = zc.recipe.egg
eggs =
${buildout:eggs}
${instance1:eggs}
Pillow
${test:eggs}
plone.app.robotframework[reload, debug]

[coverage]
recipe = zc.recipe.egg
eggs = coverage

[test-coverage]
recipe = collective.recipe.template
input = inline:
#!/bin/bash
export TZ=UTC
${buildout:directory}/bin/coverage run bin/test $*
${buildout:directory}/bin/coverage html
${buildout:directory}/bin/coverage report -m --fail-under=90
# Fail (exit status 1) if coverage returns exit status 2 (this happens
# when test coverage is below 100%.
output = ${buildout:directory}/bin/test-coverage
mode = 755

[plone-helper-scripts]
recipe = zc.recipe.egg
eggs =
Products.CMFPlone
${instance:eggs}
interpreter = zopepy
scripts =
zopepy
plone-compile-resources
19 changes: 19 additions & 0 deletions checkouts.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[buildout]
always-checkout = force
auto-checkout +=

[remotes]
imio = https://github.com/imio
imio_push = git@github.com:imio
plone = https://github.com/plone
plone_push = git@github.com:plone
ftw = https://github.com/4teamwork
ftw_push = git@github.com:4teamwork
zopefoundation = https://github.com/zopefoundation
zopefoundation_push = git@github.com:zopefoundation
zopesvn = svn://svn.zope.org/repos/main/
col = https://github.com/collective
col_push = git@github.com:collective

[sources]
imio.helpers = git ${remotes:imio}/imio.helpers.git pushurl=${remotes:imio_push}/imio.helpers.git
Loading