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 23:33 | Zajímavý projekt

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Web Programming by O'Reilly. Za 1 dolar a více lze koupit 5 elektronických knih, za 8 dolarů a více lze koupit 11 elektronických knih a za 15 dolarů a více lze koupit 17 elektronických knih věnovaných webovému programování od nakladatelství O'Reilly Media. Část ceny lze určit charitě.

Ladislav Hagara | Komentářů: 0
včera 23:00 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 162. brněnský sraz, který proběhne v pátek 22. března od 18:00 v restauraci Slatinský šenk na adrese Zlínská 12.

Ladislav Hagara | Komentářů: 0
včera 16:22 | Nová verze

Jonathan Thomas oznámil vydání nové verze 2.4.4 video editoru OpenShot (Wikipedie). Přehled novinek na YouTube. Zdrojové kódy OpenShotu jsou k dispozici na GitHubu. Ke stažení je také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit.

Ladislav Hagara | Komentářů: 0
včera 15:22 | Zajímavý článek

Mozilla.cz informuje, že Firefox bude mít nového správce hesel Lockbox. Lockbox bude integrován s Firefox Monitorem – službou pro varování při únicích dat.

Ladislav Hagara | Komentářů: 0
včera 11:33 | Nová verze

Webový prohlížeč Falkon založený na QtWebEngine (Blink) byl vydán ve verzi 3.1. Podle seznamu změn zlepšuje integraci v rámci KDE, opravuje několik chyb a stabilizuje podporu rozšíření v Python a přidává podporu QML.

Fluttershy, yay! | Komentářů: 2
včera 11:22 | Komunita

Česká Wikipedie je dnes vypnuta. Na protest proti evropské reformě autorského práva.

Ladislav Hagara | Komentářů: 13
20.3. 18:11 | Nová verze

Po půl roce vývoje od vydání verze 7.0.0 byla vydána verze 8.0.0 překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, clang-tools-extra, LLD a Libc++.

Ladislav Hagara | Komentářů: 0
20.3. 17:44 | Nová verze

Bylo vydáno Eclipse IDE 2019-03 aneb Eclipse 4.11. Nově vychází toto vývojové prostředí čtvrtletně. Představení novinek na YouTube.

Ladislav Hagara | Komentářů: 0
20.3. 01:11 | IT novinky

V říjnu loňského roku společnost Google představila hráčům počítačových her Project Stream umožňující streamování AAA her do webového prohlížeče Chrome. Včera na konferenci GDC 2019 (Game Developers Conference) společnost Google oficiálně představila (YouTube) pokračování projektu – herní platformu Stadia. V Česku a na Slovensku je služba Stadia zatím nedostupná.

Ladislav Hagara | Komentářů: 24
19.3. 23:11 | Nová verze

Byla vydána Java 12 / JDK 12. Nových vlastností (JEP - JDK Enhancement Proposal) je 8. Nová Java / JDK vychází každých 6 měsíců.

Ladislav Hagara | Komentářů: 2
Kolik balíčků (v tisících) máte nainstalovaných na svém systému?
 (4%)
 (13%)
 (33%)
 (30%)
 (20%)
 (3%)
 (2%)
 (1%)
 (3%)
Celkem 224 hlasů
 Komentářů: 21, poslední včera 23:40
Rozcestník

version

6.6.2018 11:36 | Přečteno: 1911× | 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: 68
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: 35 | 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: 35 | 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: 68
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: 30 | 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.
I think warning here is a bug. The biggest cloud service provider. 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: 35 | 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: 38 | 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 ? 

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 / Jeseník
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.