Remove Hatch
This commit is contained in:
parent
22ea9842d4
commit
962b238f6a
|
@ -1,59 +0,0 @@
|
||||||
# Inspiration from <https://github.com/pypa/hatch/issues/669>
|
|
||||||
|
|
||||||
name: Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["**"]
|
|
||||||
pull_request:
|
|
||||||
branches: ["**"]
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
build:
|
|
||||||
name: Build jlmkr tool
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
python-version:
|
|
||||||
- "3.11" # TrueNAS SCALE 24.04 Dragonfish
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: ${{ matrix.python-version }}
|
|
||||||
|
|
||||||
- name: Set up pip cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: ~/.cache/pip
|
|
||||||
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }}
|
|
||||||
restore-keys: ${{ runner.os }}-pip-
|
|
||||||
|
|
||||||
- name: Install Hatch
|
|
||||||
uses: pypa/hatch@install
|
|
||||||
|
|
||||||
- name: Run style check
|
|
||||||
run: hatch fmt --check
|
|
||||||
|
|
||||||
# - name: Run unit tests
|
|
||||||
# run: hatch run +py=${{ matrix.python-version }} test:test
|
|
||||||
|
|
||||||
- name: Build distribution
|
|
||||||
run: hatch build -t zipapp -t appzip
|
|
||||||
|
|
||||||
# - name: Upload artifacts
|
|
||||||
# uses: actions/upload-artifact@v4
|
|
||||||
# with:
|
|
||||||
# path:
|
|
||||||
# - dist/jlmkr
|
|
||||||
# - dist/jlmkr-*.zip
|
|
||||||
# if-no-files-found: error
|
|
|
@ -1,3 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
|
@ -1,56 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
import os
|
|
||||||
from io import BytesIO
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Any, Callable, Iterable
|
|
||||||
from zipapp import create_archive
|
|
||||||
|
|
||||||
from hatchling.builders.plugin.interface import BuilderInterface
|
|
||||||
|
|
||||||
|
|
||||||
class ZipAppBuilder(BuilderInterface):
|
|
||||||
PLUGIN_NAME = "zipapp"
|
|
||||||
|
|
||||||
def get_version_api(self) -> dict[str, Callable[..., str]]:
|
|
||||||
return {"standard": self.build_standard}
|
|
||||||
|
|
||||||
def clean(self, directory: str, versions: Iterable[str]) -> None:
|
|
||||||
try:
|
|
||||||
os.remove(Path(directory, 'jlmkr'))
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def build_standard(self, directory: str, **build_data: Any) -> str:
|
|
||||||
|
|
||||||
# generate zipapp source archive
|
|
||||||
pyzbuffer = BytesIO()
|
|
||||||
create_archive('src/jlmkr', target=pyzbuffer,
|
|
||||||
interpreter='=PLACEHOLDER=',
|
|
||||||
# main='donor.jlmkr:main',
|
|
||||||
compressed=True)
|
|
||||||
zipdata = pyzbuffer.getvalue() #.removeprefix(b"#!=PLACEHOLDER=\n")
|
|
||||||
|
|
||||||
# output with preamble
|
|
||||||
outpath = Path(directory, 'jlmkr')
|
|
||||||
with open(outpath, 'wb') as f:
|
|
||||||
f.write(preamble(self.metadata.version).encode())
|
|
||||||
f.write(zipdata)
|
|
||||||
os.chmod(outpath, 0o755)
|
|
||||||
return os.fspath(outpath)
|
|
||||||
|
|
||||||
|
|
||||||
# 10 lines will conveniently match the default of head(1)
|
|
||||||
def preamble(version): return f'''#!/usr/bin/env python3
|
|
||||||
|
|
||||||
jlmkr {version}
|
|
||||||
|
|
||||||
Persistent Linux 'jails' on TrueNAS SCALE to install software (k3s, docker, portainer, podman, etc.) with full access to all files via bind mounts.
|
|
||||||
|
|
||||||
SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
-=-=-=- this is a zip file -=-=-=- what follows is binary -=-=-=-
|
|
||||||
'''
|
|
|
@ -1,11 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
from hatchling.plugin import hookimpl
|
|
||||||
|
|
||||||
from build_app import ZipAppBuilder
|
|
||||||
|
|
||||||
@hookimpl
|
|
||||||
def hatch_register_builder():
|
|
||||||
return ZipAppBuilder
|
|
|
@ -1,22 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
[build-system]
|
|
||||||
build-backend = "hatchling.build"
|
|
||||||
requires = ["hatchling"]
|
|
||||||
|
|
||||||
[project]
|
|
||||||
name = "hatch-zipapp"
|
|
||||||
version = "0.0.dev0"
|
|
||||||
classifiers = [
|
|
||||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
||||||
"Private :: Do Not Upload",
|
|
||||||
]
|
|
||||||
dependencies = ["hatchling"]
|
|
||||||
|
|
||||||
[project.entry-points.hatch]
|
|
||||||
zipapp = "hooks_app"
|
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
|
||||||
packages = ["."]
|
|
|
@ -1,3 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
|
@ -1,59 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
# hat tip: <https://github.com/dairiki/hatch-zipped-directory/blob/master/hatch_zipped_directory/builder.py>
|
|
||||||
|
|
||||||
import os
|
|
||||||
from hatchling.builders.config import BuilderConfig
|
|
||||||
from hatchling.builders.plugin.interface import BuilderInterface
|
|
||||||
from hatchling.builders.utils import normalize_relative_path
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Any, Callable, Iterable
|
|
||||||
from zipfile import ZipFile, ZIP_DEFLATED
|
|
||||||
|
|
||||||
|
|
||||||
class AppZipBuilderConfig(BuilderConfig): pass
|
|
||||||
|
|
||||||
class AppZipBuilder(BuilderInterface):
|
|
||||||
PLUGIN_NAME = "appzip"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_config_class(cls):
|
|
||||||
return AppZipBuilderConfig
|
|
||||||
|
|
||||||
def get_version_api(self) -> dict[str, Callable[..., str]]:
|
|
||||||
return {'standard': self.build_standard}
|
|
||||||
|
|
||||||
def clean(self, directory: str, versions: Iterable[str]) -> None:
|
|
||||||
for filename in os.listdir(directory):
|
|
||||||
if filename.startswith('jlmkr-') and filename.endswith('.zip'):
|
|
||||||
os.remove(Path(directory, filename))
|
|
||||||
|
|
||||||
def build_standard(self, directory: str, **build_data: Any) -> str:
|
|
||||||
outpath = Path(directory, f'jlmkr-{self.metadata.version}.zip')
|
|
||||||
with ZipFile(outpath, 'w') as zip:
|
|
||||||
zip.write(Path(directory, 'jlmkr'), 'jlmkr')
|
|
||||||
force_map = build_data['force_include']
|
|
||||||
for included_file in self.recurse_forced_files(force_map):
|
|
||||||
zip.write(
|
|
||||||
included_file.relative_path,
|
|
||||||
included_file.distribution_path,
|
|
||||||
ZIP_DEFLATED)
|
|
||||||
return os.fspath(outpath)
|
|
||||||
|
|
||||||
def get_default_build_data(self) -> dict[str, Any]:
|
|
||||||
build_data: dict[str, Any] = super().get_default_build_data()
|
|
||||||
|
|
||||||
extra_files = []
|
|
||||||
if self.metadata.core.readme_path:
|
|
||||||
extra_files.append(self.metadata.core.readme_path)
|
|
||||||
if self.metadata.core.license_files:
|
|
||||||
extra_files.extend(self.metadata.core.license_files)
|
|
||||||
|
|
||||||
force_include = build_data.setdefault("force_include", {})
|
|
||||||
for fn in map(normalize_relative_path, extra_files):
|
|
||||||
force_include[os.path.join(self.root, fn)] = Path(fn).name
|
|
||||||
build_data['force_include'] = force_include
|
|
||||||
|
|
||||||
return build_data
|
|
|
@ -1,11 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
from hatchling.plugin import hookimpl
|
|
||||||
|
|
||||||
from build_zip import AppZipBuilder
|
|
||||||
|
|
||||||
@hookimpl
|
|
||||||
def hatch_register_builder():
|
|
||||||
return AppZipBuilder
|
|
|
@ -1,22 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: © 2024 Jip-Hop and the Jailmakers <https://github.com/Jip-Hop/jailmaker>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-3.0-only
|
|
||||||
|
|
||||||
[build-system]
|
|
||||||
build-backend = "hatchling.build"
|
|
||||||
requires = ["hatchling"]
|
|
||||||
|
|
||||||
[project]
|
|
||||||
name = "hatch-appzip"
|
|
||||||
version = "0.0.dev0"
|
|
||||||
classifiers = [
|
|
||||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
||||||
"Private :: Do Not Upload",
|
|
||||||
]
|
|
||||||
dependencies = ["hatchling"]
|
|
||||||
|
|
||||||
[project.entry-points.hatch]
|
|
||||||
appzip = "hooks_zip"
|
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
|
||||||
packages = ["."]
|
|
Loading…
Reference in New Issue