- Always set the upstream when pushing git branches.
- Started recommending uv instead of pipx.
- Started requiring a minimum rspack version.
- Switched to using biome for CSS.
- Added
EMAIL_URL
to all.env
files created by the fablib. - Updated the bundled hooks.
- Stopped autodetecting the newest available Python interpreter and instead
take advantage of the fact that
uv
will download missing interpreters for us. - Disabled
experiments.css
, it's broken: web-infra-dev/rspack#8027
- Updated hooks. Added the djade Django template formatter.
- Run development server and debugpy interface with the
debug
task.
- Added support for
rspack.config.js
out of the box. - Added
rspack.library.js
to the list of automatically installed files when running thehook
task.
- Added support for pointing users to the Traduire instance when running the
mm
task. - Updated hooks.
- Switched to
uv
. Install it usingpipx install uv
if you haven't done so already.
- Improved the
*.pyc
deletion stage by skipping potentially big folders which should never contain those files. - Skipped freezing more Python packaging libraries.
- Added the missing biome configuration.
- Prepared the webpack library for configuration schema changes in webpack-dev-server 5.
- Avoid the very annoying creation of dotfiles over and over.
- Added Python 3.12 detection when rebuilding the local virtualenv.
- Changed the webpack dev server configuration to disable the compilation warnings overlay by default. Re-enabled SASS warnings from dependencies now that warnings are less annoying.
- Moved
pull-db
,pull-media
,fetch
anddeploy
into theNINE
group because they are really dependent upon our common setup there and do not work with cloud native apps.
- Improved the error message when unable to fetch a remote
.env
file. - Added a
resolvePreactAsReact
utility to the Webpack library. - Replaced black with ruff format.
- Changed the
requirements-to-freeze.txt
sorting to be case insensitive.
- Removed the Pylint refactoring warnings from the default ruff ruleset.
- Activated more ruff rules, removed the PyLint refactoring warnings, updated pre-commit hooks.
- Updated the bundled pre-commit hooks, removed flake8-logging-format from the default configuration.
- Removed the unused
config.app
. - Exposed all configuration values as
FL_*
environment values, for exampleFL_DOMAIN
.
- Fixed the
find
command which deletes oldstatic
files. - Updated the example Webpack configuration to work with the newest version of
postcss-custom-media
.
- Changed the JavaScript string extractor to strip trailing commas from argument lists.
- Switched to not deleting everything under
static/
when deploying, only delete old files.
- Updated the pre-commit hooks. Started ignoring the invalid module names generated by Django's database migration framework.
- Changed
nine-reinit-from
to create more hardlinks when syncing media files. - Switched to hatchling.
- Switched the default tooling from flake8, isort etc. to ruff. Added a
standard
pyproject.toml
file. - Fixed the differentiation between local and remote command execution with or without a replaced environment and with or without a PTY.
- Updated the pre-commit hooks.
- Quieted deprecation warnings in SASS dependencies by default. We know that divison will be going away in Dart Sass 2.0.
- Converted the
update
task to run things concurrently.
- Replaced the
include_www=False
default argument tonine-alias-add
andnine-alias-remove
with a mandatory boolean argument. - Added messages about updating the hostings overview.
- Guarded against including the environment name in the aliases list.
- Customized the syslog identifier when adding systemd services.
- Pinned fabric to <2.7 for now.
- Stopped recommending
importFrom
when usingpostcss-custom-media
.
- Fixed
fl github
to actually setorigin
(again). - Added a
--keep
flag tofl upgrade
if the virtualenv shouldn't be recreated unconditionally. - Changed the Nine systemd user service to not use a template anymore. This allows customizing the service per vhost.
- Changed the code to automatically determine the base.
- Changed
fl.require
to not only update its own version but also all dotfiles. - Added Python 3.11 to the list of known interpreters.
- Removed the
fl bitbucket
task.
- Started using the
style-loader
again in development since it properly supports source maps. - Changed the asset rule to also handle MP3 and WAV files; made the regex case insensitive.
- Added a
--recreate
option to thefl nine-db-dotenv
task. - Added a
noSplitting
export to the Webpack library to easily disable the chunk splitting optimization. It may not be an optimization for projects using very little JavaScript. - Stopped using pyinvoke's
echo
setting and opted to echo commands ourselves instead.
- Added extra arguments to
fl pull-db
which are passed to the remotepg_dump
command.
- Added flake8-bugbear.
- Changed the
output.assetModuleFilename
configuration to do the right thing when encountering files outside Django's staticfiles. - Updated the pre-commit hooks.
- Updated the password set by
fl reset-pw
with more iterations so that repeatedfl pull-db
invocations do not cause sign-outs when using Django 4.0.
- Tweaked the
bumpversion.sh
script to allow overriding the version from the commandline. - Updated the pre-commit hooks installed by
fl hook
to enforce absolute imports and target a minimum of Django 4.0. - Added a
htmlPlugin
utility to the Webpack library for scenarios where more control is required over the html-webpack-plugin configuration. - Made the forwarding proxy optional in the
devServer
Webpack library utility.
- Augmented
fl nine-reinit-from
to also support hosts withnine-manage-databases
.
- Added a
babelRule
utility to the Webpack library. - Added a
_old_dev
utility so that going back to the old way of running the webpack development server is easier. - Switched to a declarative setup.
- Avoided installing fabric 2.7.0 since some combinations of fabric and paramiko etc. seem to be buggy.
- Made
dev
use the new method of using the Webpack dev server as a proxy for the Django backend instead of having to listen on two ports and comunicating IP addresses. The new method transparently works when connecting to the development server from a different IP. - Updated the pre-commit configuration.
- Updated the ESLint configuration to assume an automatic JSX runtime.
- Removed outdated configuration file examples.
- Added a Webpack library to the files installed by
fl hook
. - Started syncing the repository URL on servers when deploying.
- Removed the hook to sort
.gitignore
, it made trouble with empty files.
- Added updating of submodules to the deployment task.
- Updated the pre-commit configuration.
- Added yet another missing babel plugin.
- Reversed the default order of ESLint and prettier. ESLint doesn't complain
about missing prettier formatting, and prettier can cleanup the results of
eslint --fix
. - Added a
reset-sq
task for resetting all PostgreSQL sequences in a database. - Added
python3.10
and removedpython3.7
andpython3.6
from the list of Python 3 exexecutables used when initializing projects locally. - Started initializing submodules in the
update
task. Using submodules for libraries is still discouraged. We use them so rarely that people forget how to do this.
- Added
verbose: true
to the ESLint hook configuration so that ESLint warnings are shown even if ESLint doesn't find any errors. - Added a missing babel dependency.
- Added a hook to sort
.gitignore
. - Made ESLint automatically apply some fixes.
- Dropped a few legacy check methods; reimplement them in your own fabfile if you still need them (or better yet, move to pre-commit).
- Dropped the
fmt
task and all utilities. Use pre-commit instead. - Updated our own pre-commit hooks.
- Changed
pull-db
to create a local.env
if it does not exist already. - Restored the automatic installation of the pre-commit hook.
- Extended
hook
with a--force
argument to allow overwriting pre-existing files in the project. - Added
.editorconfig
and.eslintrc.js
defaults tohook
. Updated thepre-commit
configuration.
- Better defaults in the
.env
: Add.localhost
to the localALLOWED_HOSTS
setting. - Generate the standard
SECURE_SSL_*
settings instead ofCANONICAL_DOMAIN*
. - Changed force pushes to use
--force-with-lease
.
- Changed
systemctl
invocations to use the--now
switch to immediately enable or disable services. - Added a
--python3
argument tonine-venv
which allows overriding the Python executable. - Stop wrapping long lines in pofiles.
- Changed
fl mm
to disable ESLint on the generatedstrings.js
file. - Added
*jsx
files to the gettext extractor. - Tweaked the pre-commit configuration.
- Changed
fl check
to build onpre-commit
instead.
- Added a configuration flag to always use force pushes for select environments.
- Added auto-updating of
fl.require
statements in projects.
- Added
pyupgrade
invocations tofl fmt
. - Changed all
_fmt_*
utilities to not stop on errors.
- Fixed the
djlint
invocation to actually reformat files.
- Added
.feinheit.dev
to the list ofALLOWED_HOSTS
innine-db-dotenv
. - Added
build
to the list of ignores. - Added
djlint
invocations tofl fmt
. - Added a
--clobber
argument tofl local
.
- Fixed the final newline behavior of
fl mm
's string extraction.
- Changed the
pkg-resources
-exclusion infl freeze
to also matchpkg_resources
. - Added a
--language
flag tofl mm
which is especially useful when adding a new language. - Integrated the gettext string extraction script into
fl mm
.
- Switch from
npx
toyarn run
. - Changed the
update
task to not fail when running migrations fails. This allowsfl update pull-db
to continue. - Added
dist
to the list of folders to skip when runningmakemessages
.
- Added
--force
tofl deploy
to makegit push
use a force-push. This is especially useful to deploy e.g. staging branches which are rewound often. - Added a
SENTRY_ENVIRONMENT=
entry to generated.env
files.
- Added a
pull_media
task. - Dropped
--spec
arguments frompipx run
invocations. The temporary virtual environments will be cached for a maximum of 14 days anyway, so they should always be recent enough.
- Added an info message when the fh-fablib version is newer than the required version (so that projects' fabfiles are updated more often).
- Changed
_deploy_django
(and therefore the default deployment) to use hard resets to update the code on the server instead of ff-only merges, but add an additional check for uncommitted changes right before resetting as a safety measure.
- Added
config.environment
holding the name of the active environment or"default"
.
- Restructured
fl deploy
into more building blocks so that overriding aspects of the deployment is less work.
- Added
fl nine-reinit-from
. - Changed the configuration method for multiple environments.
- Fixed the large files check to skip removed files.
- Changed the large files check to report file sizes in kilobytes.
- Added a check for large files to
fl check
.
- Added
fl hook
to replace the git pre-commit hook. - Corrected and updated the examples in the README.
- Changed
fl github
to terminate with a better error message when theorigin
remote is already setup.
- Fixed
nine-disable
to backup and drop the database for real. - Promoted
_reset_passwords
toreset-pw
. - Removed the explicit activation of pip's 2020 resolver from pip invocations, it is the default now.
- Added
nine-restart
to restart the application server. - Started executing nodejs binaries using
npx
. - Avoided pip 20.3.2 because it downloads too many packages.
- Added a
--fast
switch todeploy
which skips Webpack.
- Allowed setting the
environments
config key to produce nicer error messages when forgetting to set an environment with which to interact.
- Started using pip's 2020 resolver when upgrading the virtualenv.
- Started terminating deploys when there are uncommitted changes on the server.
- Started sourcing
.profile
again when running psql admin commands on the server. - Fixed many problems with obviously untested
nine-*
tasks.
- Added
github
to create a repo on GitHub using the GitHub CLI <https://cli.github.com/>__ and immediately push the code there. - Fixed uses of
input()
which somehow didn't work like they were supposed to at all.
- Renamed the entrypoint from
fab
tofl
. - Switched from running
pip
directly to the recommendedpython -m pip
everywhere. - Avoided starting too many processes by executing binaries in
node_modules/.bin
directly instead of going throughyarn run
.
- Made
nine-venv
recreate the virtualenv from scratch. - Made
local
recreatenode_modules
and the virtualenv from scratch.
- Fixed
nine-alias-remove
to actually remove the second subdomain. - Added a
--include-www
option tonine-alias-add
andnine-alias-remove
. Thewww.
subdomain isn't added or removed by default anymore.
- Removed the redundant
--trailing-comma es5
argument to prettier, it is the default. - Splitted
_fmt_pipx_cmds
into_fmt_isort
and_fmt_black
. - Reordered
fmt
to run Python tasks first, ascheck
does. - Extracted the branch check into its own
_check_branch
function. - Changed
nine-venv
to prefer pyenv shims instead of the potentially outdated system-provided python3 binary.
- Added our own
entry_points
so that the--include-deps
argument topipx
isn't necessary anymore. - Removed an unnecessary
# noqa
. - Stopped running
flake8
when formatting code.
- Added the
--stable
switch toupgrade
to only install stable Python packages, no alpha, beta or rc versions. - Disabled shortflags to
dev
. - Changed the default
fmt
implementation to run isort, black and flake8 via pipx. It is recommended you removeisort
configuration from your project. - Added default options when running prettier so that prettier configuration may be dropped from package.json (ES5 commas, no semicolons where not necessary).
- Changed
check
to run flake8 using pipx too. - Inlined the
dev
andprod
npm scripts.
- Added a multi-env example to the README.
- Switched to running all commands with
echo
andpty
and withoutreplace_env
. - Activated rsync stats instead of succeeding silently or filling the screen several times with spam when deploying.
- Changed
nine-db-dotenv
to terminate when.env
already exists on the server.
- Completely changed the structure of this library. Rebuilt the library on top of Fabric>2. Dropped old stuff and renamed everything.
- Switched to a date-based versioning scheme, which does NOT follow semver.