Skip to main content

fh-fablib

Project description

Usage

  1. Install pipx

  2. Install fh-fablib

    1. pipx install fh_fablib --include-deps if you’re happy with the packaged version

    2. pipx install --editable git+ssh://git@github.com/feinheit/fh-fablib.git@main#egg=fh_fablib --include-deps otherwise

  3. Add a fabfile.py to your project. A minimal example follows:

    from pathlib import Path
    
    import fh_fablib as fl
    
    fl.require("1.0.20200819")
    fl.config.update(
        base=Path(__file__).parent,
        host="www-data@feinheit06.nine.ch",
        domain="example.com",
        branch="main",
        remote="production",
    )
    
    ns = fl.Collection(*fl.GENERAL, *fl.NINE)
  4. Run fab --list to get a list of commands.

Loading the fh_fablib module automatically creates .git/hooks/pre-commit which runs fab check before each commit.

Configuration values

  • app = "app": Name of primary Django app containing settings, assets etc.

  • base: pathlib.Path object pointing to the base dir of the project.

  • branch: Branch containing code to be deployed.

  • domain: Primary domain of website. The database name and cache key prefix are derived from this value.

  • host: SSH connection string (username@server)

  • remote: git remote name for the server. Only used for the fetch task.

Adding or overriding bundled tasks

For the sake of an example, suppose that additional processes should be restarted after deployment. A custom deploy task follows:

# ... continuing the fabfile above

@fl.task
def deploy(ctx):
    """Deploy once 🔥"""
    fl.deploy(ctx)  # Reuse
    with fl.Connection(fl.config.host) as conn:
        conn.run("systemctl --user restart other.service")

ns.add_task(deploy)

Available tasks

fh_fablib.GENERAL

  • bitbucket: Create a repository on Bitbucket and push the code

  • check: Check the coding style

  • cm: Compile the translation catalogs

  • deploy: Deploy once 🔥

  • dev: Run the development server for the frontend and backend

  • fetch: Ensure a remote exists for the server and fetch

  • fmt: Format the code

  • freeze: Freeze the virtualenv’s state

  • local: Local environment setup

  • mm: Update the translation catalogs

  • pull-db: Pull a local copy of the remote DB and reset all passwords

  • update: Update virtualenv and node_modules to match the lockfiles

  • upgrade: Re-create the virtualenv with newest versions of all libraries

fh_fablib.NINE

  • nine: Run all nine🌟 setup tasks in order

  • nine-alias-add: Add aliasses to a nine-manage-vhost virtual host

  • nine-alias-remove: Remove aliasses from a nine-manage-vhost virtual host

  • nine-checkout: Checkout the repository on the server

  • nine-db-dotenv: Create a database and initialize the .env. Currently assumes that the shell user has superuser rights (either through PGUSER and PGPASSWORD environment variables or through peer authentication)

  • nine-disable: Disable a virtual host, dump and remove the DB and stop the gunicorn@ unit

  • nine-ssl: Activate SSL

  • nine-unit: Start and enable a gunicorn@ unit

  • nine-venv: Create a venv and install packages from requirements.txt

  • nine-vhost: Create a virtual host using nine-manage-vhosts

Building blocks

The following functions may be used to build your own tasks. They cannot be executed directly from the command line.

Checks

  • _check_flake8(ctx): Run venv/bin/flake8

  • _check_django(ctx): Run Django’s checks

  • _check_prettier(ctx): Check whether the frontend code conforms to prettier’s formatting

  • _check_eslint(ctx): Run ESLint

Formatters

  • _fmt_prettier(ctx): Run prettier

  • _fmt_tox_style(ctx): Run tox -e style

Helpers

  • _local_env(path=".env"): speckenv.env for a local env file

  • _srv_env(conn, path): speckenv.env for a remote env file

  • _python3(): Return the path of a Python 3 executable. Prefers newer Python versions.

  • _local_dotenv_if_not_exists(): Ensure a local .env with a few default values exists. Does nothing if .env exists already.

  • _local_dbname(): Ensure a local .env exists and return the database name.

  • _dbname_from_dsn(dsn): Extract the database name from a DSN.

  • _dbname_from_domain(domain): Mangle the domain to produce a string suitable as a database name, database user and cache key prefix.

  • _concurrently(ctx, jobs): Run a list of shell commands concurrently and wait for all of them to terminate (or Ctrl-C).

  • _random_string(length, chars=None): Return a random string of length, suitable for generating secret keys etc.

  • _reset_passwords(ctx): Set all user passwords to "password".

  • require(version): Terminate if fh_fablib is older.

  • terminate(msg): Terminate processing with an error message.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fh-fablib-1.0.20200821.tar.gz (10.4 kB view details)

Uploaded Source

File details

Details for the file fh-fablib-1.0.20200821.tar.gz.

File metadata

  • Download URL: fh-fablib-1.0.20200821.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2

File hashes

Hashes for fh-fablib-1.0.20200821.tar.gz
Algorithm Hash digest
SHA256 4d400b7237b0a9d6dcc768e6b4aa8791b172ac49a801f8376f5992fa86025d02
MD5 bdc36ba203937c13882e633a8ea89cf4
BLAKE2b-256 c1dede0de833ce89e528c46ded1275cbada1dc54ecc814e2c925a872c6fe30f7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page