mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
port packaging from r0c
This commit is contained in:
parent
b3de0712d3
commit
465cc8882f
5
scripts/make-pypi-release.bat
Normal file
5
scripts/make-pypi-release.bat
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
cd %~dp0\..
|
||||||
|
python setup.py clean2
|
||||||
|
python setup.py rstconv
|
||||||
|
python setup.py sdist bdist_wheel --universal
|
||||||
|
REM python setup.py sdist upload -r pypi
|
104
scripts/make-pypi-release.sh
Executable file
104
scripts/make-pypi-release.sh
Executable file
|
@ -0,0 +1,104 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
echo
|
||||||
|
|
||||||
|
# osx support
|
||||||
|
sed=$( which gsed 2>/dev/null || which sed)
|
||||||
|
find=$(which gfind 2>/dev/null || which find)
|
||||||
|
sort=$(which gsort 2>/dev/null || which sort)
|
||||||
|
|
||||||
|
which md5sum 2>/dev/null >/dev/null &&
|
||||||
|
md5sum=md5sum ||
|
||||||
|
md5sum="md5 -r"
|
||||||
|
|
||||||
|
mode="$1"
|
||||||
|
|
||||||
|
[[ "x$mode" == x ]] &&
|
||||||
|
{
|
||||||
|
echo "need argument 1: (D)ry or (U)pload"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ -e copyparty/__main__.py ]] || cd ..
|
||||||
|
[[ -e copyparty/__main__.py ]] ||
|
||||||
|
{
|
||||||
|
echo "run me from within the copyparty folder"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# one-time stuff, do this manually through copy/paste
|
||||||
|
true ||
|
||||||
|
{
|
||||||
|
cat > ~/.pypirc <<EOF
|
||||||
|
[distutils]
|
||||||
|
index-servers =
|
||||||
|
pypi
|
||||||
|
pypitest
|
||||||
|
|
||||||
|
[pypi]
|
||||||
|
username=qwer
|
||||||
|
password=asdf
|
||||||
|
|
||||||
|
[pypitest]
|
||||||
|
repository: https://test.pypi.org/legacy/
|
||||||
|
username=qwer
|
||||||
|
password=asdf
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# set pypi password
|
||||||
|
chmod 600 ~/.pypirc
|
||||||
|
sed -ri 's/qwer/username/;s/asdf/password/' ~/.pypirc
|
||||||
|
|
||||||
|
# setup build env
|
||||||
|
cd ~/dev/copyparty &&
|
||||||
|
virtualenv buildenv
|
||||||
|
. buildenv/bin/activate
|
||||||
|
pip install m2r
|
||||||
|
deactivate
|
||||||
|
|
||||||
|
# test rst
|
||||||
|
pip install docutils
|
||||||
|
./setup.py --long-description | tee ~/Desktop/rst | rst2html.py > ~/Desktop/rst.html
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pydir="$(
|
||||||
|
which python |
|
||||||
|
sed -r 's@[^/]*$@@'
|
||||||
|
)"
|
||||||
|
|
||||||
|
[[ -e "$pydir/activate" ]] &&
|
||||||
|
{
|
||||||
|
echo '`deactivate` your virtualenv'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function have() {
|
||||||
|
python -c "import $1; $1; $1.__version__"
|
||||||
|
}
|
||||||
|
|
||||||
|
. buildenv/bin/activate
|
||||||
|
have setuptools
|
||||||
|
have wheel
|
||||||
|
have m2r
|
||||||
|
./setup.py clean2
|
||||||
|
./setup.py rstconv
|
||||||
|
./setup.py sdist bdist_wheel --universal
|
||||||
|
[[ "x$mode" == "xu" ]] &&
|
||||||
|
./setup.py sdist bdist_wheel upload -r pypi
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
|
||||||
|
all done!
|
||||||
|
|
||||||
|
to clean up the source tree:
|
||||||
|
|
||||||
|
cd ~/dev/copyparty
|
||||||
|
./setup.py clean2
|
||||||
|
|
||||||
|
EOF
|
107
scripts/make-tgz-release.sh
Executable file
107
scripts/make-tgz-release.sh
Executable file
|
@ -0,0 +1,107 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
echo
|
||||||
|
|
||||||
|
sed=$( which gsed 2>/dev/null || which sed)
|
||||||
|
find=$(which gfind 2>/dev/null || which find)
|
||||||
|
sort=$(which gsort 2>/dev/null || which sort)
|
||||||
|
|
||||||
|
which md5sum 2>/dev/null >/dev/null &&
|
||||||
|
md5sum=md5sum ||
|
||||||
|
md5sum="md5 -r"
|
||||||
|
|
||||||
|
ver="$1"
|
||||||
|
|
||||||
|
[[ "x$ver" == x ]] &&
|
||||||
|
{
|
||||||
|
echo "need argument 1: version"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ -e copyparty/__main__.py ]] || cd ..
|
||||||
|
[[ -e copyparty/__main__.py ]] ||
|
||||||
|
{
|
||||||
|
echo "run me from within the copyparty folder"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
out_dir="$(pwd | $sed -r 's@/[^/]+$@@')"
|
||||||
|
zip_path="$out_dir/copyparty-$ver.zip"
|
||||||
|
tgz_path="$out_dir/copyparty-$ver.tar.gz"
|
||||||
|
|
||||||
|
[[ -e "$zip_path" ]] ||
|
||||||
|
[[ -e "$tgz_path" ]] &&
|
||||||
|
{
|
||||||
|
echo "found existing archives for this version"
|
||||||
|
echo " $zip_path"
|
||||||
|
echo " $tgz_path"
|
||||||
|
echo
|
||||||
|
echo "continue?"
|
||||||
|
read -u1
|
||||||
|
}
|
||||||
|
rm "$zip_path" 2>/dev/null || true
|
||||||
|
rm "$tgz_path" 2>/dev/null || true
|
||||||
|
|
||||||
|
#$sed -ri "s/^(ADMIN_PWD *= *u).*/\1'hunter2'/" copyparty/config.py
|
||||||
|
|
||||||
|
tmp="$(mktemp -d)"
|
||||||
|
rls_dir="$tmp/copyparty-$ver"
|
||||||
|
mkdir "$rls_dir"
|
||||||
|
|
||||||
|
echo ">>> export"
|
||||||
|
git archive master |
|
||||||
|
tar -x -C "$rls_dir"
|
||||||
|
|
||||||
|
cd "$rls_dir"
|
||||||
|
$find -type d -exec chmod 755 '{}' \+
|
||||||
|
$find -type f -exec chmod 644 '{}' \+
|
||||||
|
|
||||||
|
commaver="$(
|
||||||
|
printf '%s\n' "$ver" |
|
||||||
|
sed -r 's/\./,/g'
|
||||||
|
)"
|
||||||
|
|
||||||
|
grep -qE "^VERSION *= \(${commaver}\)$" copyparty/__version__.py ||
|
||||||
|
{
|
||||||
|
echo "$tmp"
|
||||||
|
echo "bad version"
|
||||||
|
echo
|
||||||
|
echo " arg: $commaver"
|
||||||
|
echo "code: $(
|
||||||
|
cat copyparty/__version__.py |
|
||||||
|
grep -E '^VERSION'
|
||||||
|
)"
|
||||||
|
echo
|
||||||
|
echo "continue?"
|
||||||
|
read -u1
|
||||||
|
}
|
||||||
|
|
||||||
|
rm -rf .vscode
|
||||||
|
rm \
|
||||||
|
.gitattributes \
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
mv LICENSE LICENSE.txt
|
||||||
|
|
||||||
|
# messy because osx support
|
||||||
|
$find -type f -exec $md5sum '{}' \+ |
|
||||||
|
$sed -r 's/(.{32})(.*)/\2\1/' | LC_COLLATE=c $sort |
|
||||||
|
$sed -r 's/(.*)(.{32})/\2\1/' |
|
||||||
|
$sed -r 's/^(.{32}) \./\1 ./' > ../.sums.md5
|
||||||
|
mv ../.sums.md5 .
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
echo ">>> tar"; tar -czf "$tgz_path" "copyparty-$ver"
|
||||||
|
echo ">>> zip"; zip -qr "$zip_path" "copyparty-$ver"
|
||||||
|
|
||||||
|
rm -rf "$tmp"
|
||||||
|
echo
|
||||||
|
echo "done:"
|
||||||
|
echo " $zip_path"
|
||||||
|
echo " $tgz_path"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# function alr() { ls -alR copyparty-$1 | $sed -r "s/copyparty-$1/copyparty/" | $sed -r 's/[A-Z][a-z]{2} [0-9 ]{2} [0-9]{2}:[0-9]{2}//' > $1; }; for x in master rls src ; do alr $x; done
|
||||||
|
|
203
setup.py
Executable file
203
setup.py
Executable file
|
@ -0,0 +1,203 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# coding: utf-8
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import io
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from glob import glob
|
||||||
|
from shutil import rmtree
|
||||||
|
|
||||||
|
setuptools_available = True
|
||||||
|
try:
|
||||||
|
# need setuptools to build wheel
|
||||||
|
from setuptools import setup, Command
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
# works in a pinch
|
||||||
|
setuptools_available = False
|
||||||
|
from distutils.core import setup, Command
|
||||||
|
|
||||||
|
from distutils.spawn import spawn
|
||||||
|
|
||||||
|
if "bdist_wheel" in sys.argv and not setuptools_available:
|
||||||
|
print("cannot build wheel without setuptools")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def mglob(dirname, extensions):
|
||||||
|
ret = []
|
||||||
|
for ext in extensions:
|
||||||
|
ret.extend(glob(dirname + "/*." + ext))
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
NAME = "copyparty"
|
||||||
|
VERSION = None
|
||||||
|
data_files = [("share/doc/copyparty", ["README.rst", "README.md", "LICENSE"])]
|
||||||
|
manifest = ""
|
||||||
|
for dontcare, files in data_files:
|
||||||
|
# print(dontcare)
|
||||||
|
for fn in files:
|
||||||
|
manifest += "include {0}\n".format(fn)
|
||||||
|
|
||||||
|
here = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
with open(here + "/MANIFEST.in", "wb") as f:
|
||||||
|
f.write(manifest.encode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
LONG_DESCRIPTION = ""
|
||||||
|
LDCT = ""
|
||||||
|
with open(here + "/README.rst", "rb") as f:
|
||||||
|
txt = f.read().decode("utf-8")
|
||||||
|
txt = txt[txt.find("`") :]
|
||||||
|
LONG_DESCRIPTION = txt
|
||||||
|
LDCT = "text/x-rst"
|
||||||
|
except:
|
||||||
|
print("\n### could not open README.rst ###\n")
|
||||||
|
with open(here + "/README.md", "rb") as f:
|
||||||
|
txt = f.read().decode("utf-8")
|
||||||
|
LONG_DESCRIPTION = txt
|
||||||
|
LDCT = "text/markdown"
|
||||||
|
|
||||||
|
|
||||||
|
about = {}
|
||||||
|
if not VERSION:
|
||||||
|
with open(os.path.join(here, NAME, "__version__.py"), "rb") as f:
|
||||||
|
exec(f.read().decode("utf-8").split("\n\n", 1)[1], about)
|
||||||
|
else:
|
||||||
|
about["__version__"] = VERSION
|
||||||
|
|
||||||
|
|
||||||
|
class clean2(Command):
|
||||||
|
description = "Cleans the source tree"
|
||||||
|
user_options = []
|
||||||
|
|
||||||
|
def initialize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def finalize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
os.system("{0} setup.py clean --all".format(sys.executable))
|
||||||
|
|
||||||
|
try:
|
||||||
|
rmtree("./dist")
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
rmtree("./copyparty.egg-info")
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
nuke = []
|
||||||
|
for (dirpath, dirnames, filenames) in os.walk("."):
|
||||||
|
for fn in filenames:
|
||||||
|
if (
|
||||||
|
fn.endswith(".rst")
|
||||||
|
or fn.endswith(".pyc")
|
||||||
|
or fn.endswith(".pyo")
|
||||||
|
or fn.endswith(".pyd")
|
||||||
|
or fn.startswith("MANIFEST")
|
||||||
|
):
|
||||||
|
nuke.append(dirpath + "/" + fn)
|
||||||
|
|
||||||
|
for fn in nuke:
|
||||||
|
os.unlink(fn)
|
||||||
|
|
||||||
|
|
||||||
|
class rstconv(Command):
|
||||||
|
description = "Converts markdown to rst"
|
||||||
|
user_options = []
|
||||||
|
|
||||||
|
def initialize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def finalize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.proc_dir(".")
|
||||||
|
self.proc_dir("docs")
|
||||||
|
|
||||||
|
def proc_dir(self, path):
|
||||||
|
import m2r
|
||||||
|
|
||||||
|
for (dirpath, dirnames, filenames) in os.walk(path):
|
||||||
|
|
||||||
|
dirnames.sort()
|
||||||
|
for fn in sorted(filenames):
|
||||||
|
|
||||||
|
fn = dirpath + "/" + fn
|
||||||
|
if not fn.endswith(".md"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
rst_fn = fn[:-3] + ".rst"
|
||||||
|
with open(fn, "rb") as f:
|
||||||
|
md = f.read().decode("utf-8")
|
||||||
|
|
||||||
|
md = md.replace("* **[", "* [").replace(")** <-", ") <-")
|
||||||
|
rst = m2r.convert(md)
|
||||||
|
rst = rst.replace(":raw-html-m2r:`<del>", ":sub:`")
|
||||||
|
rst = rst.replace("</del>`", "`")
|
||||||
|
|
||||||
|
with open(rst_fn, "wb") as f:
|
||||||
|
f.write(rst.encode("utf-8"))
|
||||||
|
|
||||||
|
|
||||||
|
args = {
|
||||||
|
"name": NAME,
|
||||||
|
"version": about["__version__"],
|
||||||
|
"description": "http file sharing hub",
|
||||||
|
"long_description": LONG_DESCRIPTION,
|
||||||
|
"long_description_content_type": LDCT,
|
||||||
|
"author": "ed",
|
||||||
|
"author_email": "copyparty@ocv.me",
|
||||||
|
"url": "https://github.com/9001/copyparty",
|
||||||
|
"license": "MIT",
|
||||||
|
"data_files": data_files,
|
||||||
|
"classifiers": [
|
||||||
|
"Development Status :: 5 - Production/Stable",
|
||||||
|
"License :: OSI Approved :: MIT License",
|
||||||
|
"Programming Language :: Python",
|
||||||
|
"Programming Language :: Python :: 2",
|
||||||
|
"Programming Language :: Python :: 2.7",
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"Programming Language :: Python :: 3.3",
|
||||||
|
"Programming Language :: Python :: 3.4",
|
||||||
|
"Programming Language :: Python :: 3.5",
|
||||||
|
"Programming Language :: Python :: 3.6",
|
||||||
|
"Programming Language :: Python :: 3.7",
|
||||||
|
"Programming Language :: Python :: Implementation :: CPython",
|
||||||
|
"Programming Language :: Python :: Implementation :: PyPy",
|
||||||
|
"Environment :: Console",
|
||||||
|
"Topic :: Communications :: Chat",
|
||||||
|
],
|
||||||
|
"cmdclass": {"rstconv": rstconv, "clean2": clean2},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if setuptools_available:
|
||||||
|
args.update(
|
||||||
|
{
|
||||||
|
"install_requires": [],
|
||||||
|
"include_package_data": True,
|
||||||
|
"packages": ["copyparty"],
|
||||||
|
"entry_points": {
|
||||||
|
"console_scripts": ["copyparty = copyparty.__main__:main"]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
args.update({"packages": ["copyparty"], "scripts": ["bin/copyparty"]})
|
||||||
|
|
||||||
|
|
||||||
|
# import pprint
|
||||||
|
# pprint.PrettyPrinter().pprint(args)
|
||||||
|
# sys.exit(0)
|
||||||
|
|
||||||
|
setup(**args)
|
Loading…
Reference in a new issue