abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 19:44 | IT novinky

    Tribunál Soudního dvora Evropské unie dnes zamítl několik žalob, v nichž se americká společnost Apple ohrazovala proti pravidlům fungování velkých technologických společností na unijním trhu. Applu se nelíbilo, že jeho obchod s aplikacemi a operační systém iOS mají podléhat přísnějším povinnostem jen proto, že Brusel firmu považuje za takzvaného gatekeepera, tedy strážce přístupu.

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

    Na WhatsAppu budou postupně v průběhu následujících měsíců zavedena uživatelská jména. Telefonní čísla tak mohou zůstat soukromá. Aktuálně si lze uživatelské jméno rezervovat.

    Ladislav Hagara | Komentářů: 3
    včera 11:11 | IT novinky

    Byl aktualizován TIOBE Index (Wikipedie). Programovací jazyk Rust se poprvé dostal do první desítky tohoto žebříčku popularity programovacích jazyků. Vede Python následovaný C, C++, Java, C#, …

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

    Proton (Wikipedie), tj. fork Wine integrovaný ve Steamu umožňující na Linuxu hrát hry určené pouze pro Windows, byl vydán ve verzi 11.0-1. Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled všech podporovaných her na stránkách ProtonDB

    Ladislav Hagara | Komentářů: 0
    7.7. 20:44 | Zajímavý software

    Byly publikovány zdrojové kódy počítačové hry Unturned. Pro nekomerční účely. V plánu je přelicencování pod MIT. Hra Unturned je postavena nad multiplatformním herním enginem Unity.

    Ladislav Hagara | Komentářů: 1
    7.7. 15:55 | IT novinky

    První česká družice navržená a sestavená výhradně studenty se dostala na oběžnou dráhu Země. Družice KOSTKA, kterou vyvinul studentský tým YSpace z Vysokého učení technického v Brně (VUT), dnes odstartovala na palubě rakety Falcon 9 společnosti SpaceX v rámci mise Transporter-17 z kalifornské základny Vandenberg Space Force Base.

    Ladislav Hagara | Komentářů: 0
    7.7. 05:00 | IT novinky

    Po nákresech ovladače Steam Controller a puku společnost Valve na svém GitLabu publikovala projekt Inkterface, tj. podrobný návod (PDF, video v mp4) na sestavení předního panelu s e-papírovým displejem pro Steam Machine pro zobrazování systémových informací. Použity jsou součástky od společnosti Adafruit.

    Ladislav Hagara | Komentářů: 2
    7.7. 04:00 | Bezpečnostní upozornění

    V jádře Linux byla nalezena a v dubnu letošního roku v upstreamu opravena kritická zranitelnost Bad Epoll aneb CVE-2026-46242. Jedná se o zranitelnost typu "race-condition use-after-free", která běžnému uživateli umožňuje získat práva roota. Na distribucích Linuxu i na Androidu. Dokonce i zevnitř sandboxu prohlížeče Chrome. Chyba byla do Linuxu zavedena v dubnu 2023, tj. Linux 6.4.

    Ladislav Hagara | Komentářů: 0
    6.7. 23:22 | Nová verze

    Byla vydána nová verze 10.4 sady aplikací pro SSH komunikaci OpenSSH. Přináší řadu důležitých bezpečnostních oprav, vylepšení funkcí a oprav chyb. Vyzkoušet lze experimentální podporu postkvantového algoritmu mldsa44-ed25519.

    Ladislav Hagara | Komentářů: 0
    6.7. 16:33 | Zajímavý projekt

    Open Printer je otevřená kompaktní tiskárna od Open Tools. Brzy by měla být spuštěna kampaň na její podporu na Crowd Supply. Současně by měly být uvolněny zdrojové kódy. Postavena je na Raspberry Pi Zero W a STM32. Používá inkoustové kazety HP 302.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (8%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (16%)
     (25%)
    Celkem 2078 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    version

    6.6.2018 11:36 | Přečteno: 2283× | 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: 71 | 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
    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.