abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové major verzi 3.0 postavené na Qt5/KDE Frameworks 5. Předchozí verze 2.9.0 vyšla před 6 lety a byla postavená na Qt4. Portace Amaroku na Qt6/KDE Frameworks 6 by měla začít v následujících měsících.

    Ladislav Hagara | Komentářů: 2
    včera 21:44 | Komunita

    Ubuntu 24.10 bude Oracular Oriole (věštecká žluva).

    Ladislav Hagara | Komentářů: 1
    včera 20:22 | Nová verze

    Byla vydána nová verze 2.45.0 distribuovaného systému správy verzí Git. Přispělo 96 vývojářů, z toho 38 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání. Vypíchnout lze počáteční podporu repozitářů, ve kterých lze používat SHA-1 i SHA-256.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | IT novinky

    Před 25 lety, ve čtvrtek 29. dubna 1999, byla spuštěna služba "Úschovna".

    Ladislav Hagara | Komentářů: 0
    včera 01:00 | Nová verze

    Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

    Ladislav Hagara | Komentářů: 0
    28.4. 16:33 | Nová verze Ladislav Hagara | Komentářů: 0
    28.4. 03:22 | Zajímavý článek

    V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …

    Ladislav Hagara | Komentářů: 0
    28.4. 00:11 | Nová verze

    Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.

    Ladislav Hagara | Komentářů: 7
    27.4. 17:44 | Nová verze

    Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.4. 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 12
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 883 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    version

    6.6.2018 11:36 | Přečteno: 2078× | Výběrový blog | poslední úprava: 6.6.2018 20:48

    Již nějaký ten pátek ve svých projektech používám pomocný script version.py který byl modifikován speciálně pro daný projekt a zajišťoval tyto věci:

    1. Hromadnou úpravu version stringu ve specifikovaných souborech
    2. Commit version souborů do GITu
    3. Vytvoření GIT TAGu s danou verzí
    4. Push změn a TAGu na server

    V posledním projektu se ale s tímto scriptem vyskytly nějaké ty problémy a bylo třeba jej trochu poupravit, a v tu chvíli nastala ta nemilá situace kdy v x projektech byl zastaralý na míru pro projekt upravený version.py...

    No co teď s tím že ? Řešení je jasné:

    Přetavení version.py do univerzálního toolu na hromadnou změnu version stringu v projektu který může použít každý komu se hodí.

    A tak vznikl version (Ehm, GitHub)(GitLab)

    Co že tedy version umí ?

    1. Modifikuje všechny soubory v projektu obsahující version string jedním jednoduchým příkazem
    2. Přidává modifikované version soubory do GIT commitu a pushuje je na server
    3. Umí vytvořit version GIT TAG
    4. Kontroluje zda li mají všechny version soubory v projektu zapsanou stejnou verzi
    5. Kontroluje zda li nejsou žádné modifikované soubory spravované VCS GIT v projektu před změnou verze
    6. Kontroluje zda li je nová verze vyšší než stará verze
    7. Kontroluje validitu nově zadaného version string
    8. Dokáže dělat kroky v patch/minor/major version jednoduše příkazem "+" etc.

    Jak se to používá ?

    Použití je jednoduché prostě v rootu vašeho projektu spustíte jeden z těchto příkazů:

    Zjištění aktuální verze

    $ version
    NEBO
    $ version status

    Nastavení nové verze

    $ version 1.0.1
    NEBO
    $ version mark 1.0.1

    Posun o specifikovaný počet kroků v major/minor/patch číslu verze

    Pro posun se používá příkaz "+" ve formátu (+{1-3})({\d+}) kde první skupina detekuje počet "+" a dle toho určuje zda li se jedná o patch(+)/minor(++)/major(+++) změnu, druhá skupina určuje číslo posunu dané verze (default: 1)

    Příklad

    Takže příkazy pak vypadají takto

    $ version + #pro posun o 1 v patch verzi
    OR
    $ version +10 #pro posun o 10 v patch verzi
    OR
    $ version ++1 #pro posun o 1 v minor verzi

    Pro více možností viz:

    version --help
    Main entry-point into the 'version' application.
    
    This is a version
    
    License: GPL-3.0
    Website: https://github.com/Salamek/version
    
    Command details:
        mark                Mark project specified by --project_dir by <version>.
        status              Show current --project_dir version.
    
    
    Usage:
        version mark <version> [-p DIR] [-c FILE] [--dry] [--all_yes]
        version status [-p DIR] [-c FILE]
        version 
        version <version> [-p DIR] [-c FILE] [--dry] [--all_yes]
        version (-h | --help)
        version (-v | --version)
    
    Options:
        --dry                       Run as usually but don't change anything.
        -p DIR --project_dir=DIR    Project directory, if not set current is used.
        -y --all_yes                Answer YES to all prompts.
        -d --project_dir=DIR        Project directory, if not set current is used.
        -c FILE --config_file=FILE  Path to config file, if not set --project_dir/version.conf is used
        --version                   Show version.
    
    

    Instalace

    Debian a deriváty

    Přidejte repozitář těmito příkazy

    $ wget -O - https://apt.salamek.cz/apt/conf/salamek.gpg.key|sudo apt-key add -
    $ echo "deb     https://apt.salamek.cz/apt all main" | sudo tee /etc/apt/sources.list.d/salamek.cz.list
    

    Pak můžete nainstalovat python3-version pomocí

    $ apt update && apt install python3-version
    

    Archlinux

    Přidejte repozitář na konec souboru /etc/pacman.conf

    [salamek]
    Server = https://arch.salamek.cz/any
    SigLevel = Optional
    

    a pak nainstalujte příkazem

    $ pacman -Sy version
    

    Konfigurace

    Tohle všechno se samozřejmě neobejde bez nějaké té konfigurace která je uložena v $PROJECT_ROOT/.version.yml (Pouze REGEXPS a VERSION_FILES jsou povinné):

    # GIT Configuration
    GIT:
        AUTO_COMMIT: true # Autocommitnout modifikované version soubory (default: true)
        AUTO_TAG: true # Vytvořit GIT TAG s novou verzí (default: true)
        AUTO_PUSH: true # Automaticky pushnout na server false=disabled, true=enabled, 'remote_name'=enabled and push to remote_name (default: true)
        COMMIT_MESSAGE: 'New version {version}' # Text použít v commit message {version} je kotva pro version string (default: 'New version {version}')
    
    # Pole regexpů použitých pro nalezení version stringů v VERSION_FILES
    # Klíč je název regexpu a hodnota je samotný regexp
    # Přidejte své vlastní a smažte neužitečné
    REGEXPS:
        'python': __version__\s*=\s*\'(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\' # Regexp for version format commonly used in python
        'setup.py': version\s*=\s*\'(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\' # Regexp for version format commonly used in python setup.py
        'PKGBUILD': pkgver\s*=\s*(?P<version>.*) # Regexp used in PKGBUILD
    
    # Pole version souborů které mají být nalezeny a upraven, glob formát cest je podporován
    # Klíč je glob cesta a hodnota je jméno regexpu který se má použít k nalezení version string v nalezených souborech
    # Přidejte své vlastní a smažte neužitečné
    VERSION_FILES:
        'version/__init__.py': 'python'
        'setup.py': 'setup.py'
        'archlinux/PKGBUILD': 'PKGBUILD'
    
    Tak snad se to někomu z vás bude hodit :-)        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Josef Kufner avatar 6.6.2018 12:00 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: version
    Obvykle verzi v programech řeším tak, že při buildu si někam uložím výstup z git describe. Prostě vygeneruju jeden malý soubor, který obsahuje definici konstanty, nebo je součástí konfigurace projektu.

    U mnoha projektů je vidět ručně udržovaný ChangeLog a commity, které takovou konstantu někde upravují ručně, ale nikdy to není o moc víc jak jednořádková změna. Proč to tedy tak komplikovat?
    Hello world ! Segmentation fault (core dumped)
    Salamek avatar 6.6.2018 12:05 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Když mam vice jazyku / build scriptu / configuraku v projektu, tak to proste jednoduše nejde, zkoušel jsem používat single point version storage, ale vzdy to dopadlo nějakou prasofunkcionalitou v urcitch skriptech...
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Salamek avatar 6.6.2018 12:12 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Vlastne odpoved je primo v prilozenem konfiguraku, kde se meni verze v PKGBUILD pro archlinux, verze v setup.py (kde byla dříve naprasená funkce co lovila verzi z version/__init__.py) a pak finalne uprava v version/__init__.py kde se drive nachazela taky pochybnost...
    A hlavne nezapomen na to ze nektere projekty maji verzi napriklad v hlavickach kazdeho souboru, dokumentaci a tak podobne...
    Takhle jsem mohl vsechny version prasarny vyjmout z projektu a nechat tam ciste stringy... navic to za me resi git add+commit+push+pushtag a hlavne mi to nedovoli vydat verzi kdyz mam v repu neulozene zmeny.
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    6.6.2018 14:16 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: version
    Tohle se dá často automatizovat pomocí atributu export-subst (viz gitattributes(5)).
    Bystroushaak avatar 6.6.2018 12:09 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: version
    Osobně používám v python projektech parsování changelogu:
    #! /usr/bin/env python3
    from setuptools import setup
    from setuptools import find_packages
    
    
    changelog = open('CHANGELOG.rst').read()
    long_description = open('README.rst').read() + "\n\n" + changelog
    
    
    def get_version(data):
        def all_same(s):
            return all(x == s[0] for x in s)
    
        def has_digit(s):
            return any(x.isdigit() for x in s)
    
        data = data.splitlines()
        return list(
            line for line, underline in zip(data, data[1:])
            if (len(line) == len(underline) and
                all_same(underline) and
                has_digit(line) and
                "." in line),
        )[0]
    
    
    setup(
        name='...',
        version=get_version(changelog),
        description="...",
        long_description=long_description,
        url='...',
    
        author='...',
        author_email='...',
        license='MIT',
    
        packages=find_packages('src'),
        package_dir={'': 'src'},
    
        zip_safe=False,
        include_package_data=True,
        install_requires=open("requirements.txt").read().splitlines()
    )
    
    Salamek avatar 6.6.2018 12:17 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    No tohle ale pravě resi jen setup.py a CHANGELOG.rst co pak ale s PKGBUILD, hlavickami etc. BTW pouzival jsem neco podobneho, ale nakonec me to nasralo :-D Jinak opreni o changelog neni spatny napad, mozna tam pridam spravu/automaticke generovani changelogu a odpadne srani i s changelogem :-)
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Bystroushaak avatar 6.6.2018 13:24 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: version
    Já jsem jeden čas skládal changelog z git logu, ale pak mi došlo, že je to v podstatě nesmysl a že uživatele zajímají spíš ty podstatnější věci (změny api, nová fukncionalita atd), než každá blbost co jsem commitoval.
    Salamek avatar 6.6.2018 16:27 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    No me napadlo ze by se commity braly jen takove co by vyhovovaly danemu regexpu ktery si nastavi v .version.yml.
    Napr. Commit musi zacinat velkym pismenem, koncit teckou, obsahovat alespon 4 slova a za teckout koncit (Closes|Fixes)\s+#\d+. Protoze dulezite commity by mely mit sve Issue... to alespon cloveka donuti nepsat sracky do commit messages... jinak si bude muset CHANGELOG doplnovat rucne :-D
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Josef Kufner avatar 6.6.2018 18:56 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: version
    Spíš by dávalo smysl dát do komentáře commitu nějakou značku s textem a ty pak sesbírat do ChangeLogu. Ale takový komentář se klidně dá připsat do ChangeLogu rovnou a je to bez komplikací.
    Hello world ! Segmentation fault (core dumped)
    Salamek avatar 6.6.2018 19:20 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    A nebo se taky da rovnou na changelog vykaslat :-) No ta tvoje znacka je vyresena v tom mem predchozim navrhu, proste misto spravne formatovaneho commitu budes v regexpu hledat onu znacku... No zkusim neco vymyslet a otestovat jak mi s tim pujde workflow. :-D
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    6.6.2018 18:13 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: version
    co pak ale s PKGBUILD
    Vygenerovat, případně přegenerovat, ten PKGBUILD na základě setuptools metadat z setup.py? Navíc nevím jakou výhodu má mít PKGBUILD soubor přímo v repu s kódem, když aby to k něčemu bylo, stejně ten PKGBUILD musím udržovat v AURu.
    There is no point in being so cool in a cold world.
    Salamek avatar 6.6.2018 19:32 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Vygenerovat, případně přegenerovat, ten PKGBUILD na základě setuptools metadat z setup.py

    A na to existuje nejaky tool ?

    Navíc nevím jakou výhodu má mít PKGBUILD soubor přímo v repu s kódem, když aby to k něčemu bylo, stejně ten PKGBUILD musím udržovat v AURu.

    Protoze mam CI (na vlastnim HW) ktere mi buildi balicky pri release do meho arch repa a je to tak pro me pohodlnejsi nez to lovit nekde na AUR ?

    Jasne mohl bych v CI udelat release, stahnout archiv, spocitat sha256sum, vygenerovat ten PKGBUILD a nahrat jej na AUR, a pak ten balicek sestavit a uploadnout do repa. Ale to je ted pro me zbytecna prace. Ted jsem se jeste dival na AUR a zda se, ze se tam da vlozit jen jeden public key (netestoval jsem) a to situaci celkem komplikuje kdyz CI nemuze mit separe keypair.

    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Salamek avatar 6.6.2018 19:41 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Ah tak kecam: Tip: You can add multiple public keys to your profile by separating them with a newline in the input field. Takze v tom neni problem
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Salamek avatar 6.6.2018 19:35 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Ale samozrejme mas pravdu ze by se hodilo mit PKGBUILD na AUR, ale neni to pro me ted priorita protoze ja uz mam sestaveny balicek v repo :-) A dokud nekdo nevytvori issue ze mu vadi ze neni v AUR...
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Salamek avatar 6.6.2018 12:20 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    No a hlavne je pro me super jednoduchost kdy proste dam
    $ version +
    a mam hotovo :-D
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    6.6.2018 13:57 horada | skóre: 3
    Rozbalit Rozbalit vše Re: version

    Gitlab link => 404 The page could not be found or you don't have permission to view it.

    Bystroushaak avatar 6.6.2018 13:59 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: version
    On gitlab se docela hroutí pod náporem. Dával jsem před chvíli importovat nějaké moje repa z Githubu, jen abych si to zkusil a několikrát to hodilo 500.
    Salamek avatar 6.6.2018 14:09 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Sorac, ten projekt se naimportoval jako private, a ja si toho nevsiml... ted uz by to melo byt ok
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    6.6.2018 14:28 ewew | skóre: 40 | blog: ewewov_blog
    Rozbalit Rozbalit vše Re: version

    Pekne. ale nie je to komplikované ? Nepoznám tento jazyk ale nešlo by to urobiť tak, že jednotlive súbory budú mať link na súbor s verziou ? 

    Root v linuxe : "Root povedal, linux vykona."
    Salamek avatar 6.6.2018 16:17 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: version
    Ten version file neni jen soubor obsahujici string 1.2.3 ale soubor s libovolnym obsahem, tzn kod, dokumentace, hlaviky souboru etc. proto se to parsuje pomoci regexp.. napr:
    __version__ = '1.2.3'
    
    nebo
    foo=bar
    pkgver=1.2.3
    bar=foo
    
    nebo
    /**
     * Text
     * This is app version 1.2.3
     * Text...
     */
    
    No a vsude tady treba potrebujes zmenit version na 1.2.4...
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    FrostyX avatar 9.6.2018 17:19 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
    Rozbalit Rozbalit vše Re: version
    Hezký tool. Alternativně se dá použít tito nebo rpkg.
    FrostyX.cz | 1984 was not supposed to be an instruction manual.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.