Giter Site home page Giter Site logo

python-medikit / medikit Goto Github PK

View Code? Open in Web Editor NEW
38.0 4.0 4.0 578 KB

Strongly opinionated python project management.

Home Page: https://python-medikit.github.io/

Makefile 3.22% Python 91.82% Jinja 4.96%
python python3 release-engineering release-automation release-management

medikit's Issues

"Nice fatals"

Some fatals are really normal, and the stack trace dump misleads the user into thinking there is something wrong with the software.

For example:

 FileExistsError  Already started, use `medikit pipeline release start --force` to force a restart, or use `medikit pipeline release continue`.

Find a better way to output this, while not hiding anything (stack trace should be accessible, even if maybe hidden by default).

Maybe this should be a https://github.com/python-mondrian/mondrian feature ?

Remove tornado dependency

Tornado is only used to format logs nicely, and it's a bit overkill to depend on a web framework for this job. Let's code a minimal and similar log formatter and remove it.

No python Projectfiles

Let's see if we can use projectfiles for no-python projects, like okdocker or maybe a node only project.

Release pipeline: when publishing to pypi, "bad marshal data (unknown type code)" error

Probably linked to releasing with multiple version targets. Works with 3.5/3.6 but complains with 3.7. Need bytecode cache clearing between versions and/or regeneration? Maybe it's just because py3.7 is not released yet?

Traceback (most recent call last):
  File "setup.py", line 78, in <module>
    download_url='https://github.com/python-medikit/medikit/archive/{version}.tar.gz'.format(version=version),
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/command/bdist_egg.py", line 209, in run
    os.path.join(archive_root, 'EGG-INFO'), self.zip_safe()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/command/bdist_egg.py", line 245, in zip_safe
    return analyze_egg(self.bdist_dir, self.stubs)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/command/bdist_egg.py", line 355, in analyze_egg
    safe = scan_module(egg_dir, base, name, stubs) and safe
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/command/bdist_egg.py", line 392, in scan_module
    code = marshal.load(f)

Find a way to allow prereleases, but on an optin basis.

Easy to do the following, but one should opt-in to prereleases.

--- a/medikit/feature/python.py
+++ b/medikit/feature/python.py
@@ -309,7 +309,7 @@ class PythonFeature(Feature):
                     tmpfile.name, finder=repository.finder, session=repository.session, options=pip_options
                 )
             )
-            resolver = Resolver(constraints, repository, prereleases=False, clear_caches=False, allow_unsafe=False)
+            resolver = Resolver(constraints, repository, prereleases=True, clear_caches=False, allow_unsafe=False)

             self.render_file_inline(
                 'requirements{}.txt'.format('-' + extra if extra else ''),

Supports working out of git ?

Should be already enabled by the git feature, but we need to test that, and maybe have command line flags to avoid updating git repo if unwanted.

Pipelines polishing

Pipelines are very raw, for now. Enhancements that would be a quick win:

  • Documentation
  • Interractive steps / confirmation steps
  • Default pipeline in a better place
  • Ability to release to PyPI from pipeline (not default, of course)
  • Ability to enhance pipeline from features, by sending events
  • List pipelines
  • Pipelines shortcuts in makefiles ?
  • Pipeline status while running (like a wizard, step x on y ....)
  • Pipelines status : show available and started pipelines
  • Better pipeline console, no reset of logger
  • When pipeline ends, make it end so one can relaunch pipeline.

Warnings in generated file.

This file is generated by medikit ... Recipe is Projectfile, regenerate using "make update", "make update-requirements" or medikit update (if make update broken).

Website: entry points by role

  • Guide for project's operators (make help, etc.)
  • Guide for project's developers (make update, etc.)
  • Guide for project's maintainers (features, etc.)

pipelines continue although there is an error.

pip._vendor.pkg_resources.ContextualVersionConflict: (stevedore 1.28.0 (/Users/rd/.virtualenvs/rdnet/lib/python3.6/site-packages), Requirement.parse('stevedore<1.28,>=1.27'), {'bonobo'})
make: *** [install] Error 2
Make('clean install') is complete, moving forward.

Release pipeline: Sanity check before accepting a version number

While releasing, no check is done on version number. Add the following:

  • If version is lower than current, warn the user he's probably making a mistake and ask for "hard" confirmation.
  • If version is equal to current, warn and refuse if already pushed
  • If there is a version jump, warn
  • Add default ? Next patch ?
  • Add "patch"/"p", "minor"/"m", "major"/"M" string to compute the version instead of typing it.
Current version: 0.5.8 Git version: 0.5.8
Next version? 0.5.9

Better config using «mock recorders».

Mock/MagicMock calls are recorded in order, we may be able to improve the configuration process with a really nice syntax by recording all calls to mock objects then replaying them on real configurator objects once the config parsing is finished.

Check system & dependency make target ?

A lightweight "make check" task could run a lightweight environment check :

  • Are all (system) deps satisfied ?
  • Are versions correct ?
  • etc.

Can enhance the DX / onboarding for medikit-unaware developpers on managed projects.

extras_require is buggy with old setuptools versions

Michael had an old setuptools version, and looks that setup.py was not parseable.

(bonobo)bash-3.2$ pip install --upgrade setuptools
Collecting setuptools
  Using cached setuptools-36.6.0-py2.py3-none-any.whl
Installing collected packages: setuptools
  Found existing installation: setuptools 18.2
    Uninstalling setuptools-18.2:
      Successfully uninstalled setuptools-18.2
Successfully installed setuptools-36.6.0

(Do not work with 18.2, but works with 36.6)

Error was:

(bonobo)bash-3.2$ pip install --editable bonobo
Obtaining file:///Users/misha/pyconde17/bonobo
    Complete output from command python setup.py egg_info:
    error in bonobo setup command: 'extras_require' must be a dictionary whose values are strings or lists of strings containing valid project/version requirement specifiers.

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /Users/misha/pyconde17/bonobo/

Django: use yapf to adjust settings?

Following code kept for reference even if not working, but it would be amazing to be able to tune settings (like ensure that something is in INSTALLED_APPS). Maybe not achievable easily and safely, though.

    # Use yapf to adjust settings (for example, add some apps).
    @subscribe('medikit.feature.django.on_configure')
    def on_django_configure(self, event):
        original_source, newline, encoding = yapf_api.ReadFile('config/settings.py')
        print(original_source, newline, encoding)
        reformatted_code, encoding, has_change = yapf_api.FormatFile(
            'config/settings.py',
            in_place=True,
        )
        print(reformatted_code, encoding, has_change)

Initial Update

Hi 👊

This is my first visit to this fine repo, but it seems you have been working hard to keep all dependencies updated so far.

Once you have closed this issue, I'll create seperate pull requests for every update as soon as I find one.

That's it for now!

Happy merging! 🤖

Allow to list events in command line

Something like edgy-project list-event should list all available events, by feature, so it's easier to customise Projectfile. Available event content would be nice to have, too.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.