forked from aboutcode-org/commoncode
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request aboutcode-org#25 from nexB/new-configure
New configure
- Loading branch information
Showing
11 changed files
with
337 additions
and
156 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
# Ignore all Git auto CR/LF line endings conversions | ||
* -text | ||
pyproject.toml export-subst |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,8 @@ | ||
Release notes | ||
------------- | ||
### Version 0.0.0 | ||
Changelog | ||
========= | ||
|
||
|
||
v0.0.0 | ||
------ | ||
|
||
*xxxx-xx-xx* -- Initial release. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,169 @@ | ||
#!/usr/bin/env bash | ||
# | ||
# Copyright (c) nexB Inc. and others. | ||
# Copyright (c) nexB Inc. and others. All rights reserved. | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. | ||
# See https://github.com/nexB/ for support or download. | ||
# See https://aboutcode.org for more information about nexB OSS projects. | ||
# | ||
|
||
set -e | ||
#set -x | ||
|
||
# source this script for a basic setup and configuration for local development | ||
################################ | ||
# A configuration script to set things up: | ||
# create a virtualenv and install or update thirdparty packages. | ||
# Source this script for initial configuration | ||
# Use configure --help for details | ||
# | ||
# This script will search for a virtualenv.pyz app in etc/thirdparty/virtualenv.pyz | ||
# Otherwise it will download the latest from the VIRTUALENV_PYZ_URL default | ||
################################ | ||
CLI_ARGS=$1 | ||
|
||
CONFIGURE_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | ||
################################ | ||
# Defaults. Change these variables to customize this script | ||
################################ | ||
|
||
# Requirement arguments passed to pip and used by default or with --dev. | ||
REQUIREMENTS="--editable ." | ||
DEV_REQUIREMENTS="--editable .[testing]" | ||
|
||
if [[ "$1" == "--clean" ]]; then | ||
rm -rf "$CONFIGURE_ROOT_DIR/tmp" | ||
exit | ||
# where we create a virtualenv | ||
VIRTUALENV_DIR=tmp | ||
|
||
# Cleanable files and directories with the --clean option | ||
CLEANABLE=" | ||
build | ||
tmp" | ||
|
||
# extra arguments passed to pip | ||
PIP_EXTRA_ARGS=" " | ||
|
||
# the URL to download virtualenv.pyz if needed | ||
VIRTUALENV_PYZ_URL=https://bootstrap.pypa.io/virtualenv.pyz | ||
################################ | ||
|
||
|
||
################################ | ||
# Current directory where this script lives | ||
CFG_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | ||
CFG_BIN_DIR=$CFG_ROOT_DIR/$VIRTUALENV_DIR/bin | ||
|
||
|
||
################################ | ||
# Set the quiet flag to empty if not defined | ||
if [[ "$CFG_QUIET" == "" ]]; then | ||
CFG_QUIET=" " | ||
fi | ||
|
||
|
||
if [[ "$PYTHON_EXE" == "" ]]; then | ||
PYTHON_EXE=python3 | ||
################################ | ||
# find a proper Python to run | ||
# Use environment variables or a file if available. | ||
# Otherwise the latest Python by default. | ||
if [[ "$PYTHON_EXECUTABLE" == "" ]]; then | ||
# check for a file named PYTHON_EXECUTABLE | ||
if [ -f "$CFG_ROOT_DIR/PYTHON_EXECUTABLE" ]; then | ||
PYTHON_EXECUTABLE=$(cat "$CFG_ROOT_DIR/PYTHON_EXECUTABLE") | ||
else | ||
PYTHON_EXECUTABLE=python3 | ||
fi | ||
fi | ||
|
||
|
||
function setup { | ||
# create a virtualenv on Python | ||
mkdir -p $CONFIGURE_ROOT_DIR/tmp | ||
wget -O $CONFIGURE_ROOT_DIR/tmp/virtualenv.pyz https://bootstrap.pypa.io/virtualenv.pyz | ||
$PYTHON_EXE $CONFIGURE_ROOT_DIR/tmp/virtualenv.pyz --wheel embed --pip embed --setuptools embed --seeder pip $CONFIGURE_ROOT_DIR/tmp | ||
source $CONFIGURE_ROOT_DIR/tmp/bin/activate | ||
################################ | ||
cli_help() { | ||
echo An initial configuration script | ||
echo " usage: ./configure [options]" | ||
echo | ||
echo The default is to configure for regular use. Use --dev for development. | ||
echo | ||
echo The options are: | ||
echo " --clean: clean built and installed files and exit." | ||
echo " --dev: configure the environment for development." | ||
echo " --help: display this help message and exit." | ||
echo | ||
echo By default, the python interpreter version found in the path is used. | ||
echo Alternatively, the PYTHON_EXECUTABLE environment variable can be set to | ||
echo configure another Python executable interpreter to use. If this is not | ||
echo set, a file named PYTHON_EXECUTABLE containing a single line with the | ||
echo path of the Python executable to use will be checked last. | ||
set +e | ||
exit | ||
} | ||
|
||
|
||
setup | ||
clean() { | ||
# Remove cleanable file and directories and files from the root dir. | ||
echo "* Cleaning ..." | ||
for cln in $CLEANABLE; | ||
do rm -rf "${CFG_ROOT_DIR:?}/${cln:?}"; | ||
done | ||
set +e | ||
exit | ||
} | ||
|
||
$CONFIGURE_ROOT_DIR/tmp/bin/pip install -e .[testing] | ||
|
||
if [ -f "$CONFIGURE_ROOT_DIR/tmp/bin/activate" ]; then | ||
source "$CONFIGURE_ROOT_DIR/tmp/bin/activate" | ||
fi | ||
create_virtualenv() { | ||
# create a virtualenv for Python | ||
# Note: we do not use the bundled Python 3 "venv" because its behavior and | ||
# presence is not consistent across Linux distro and sometimes pip is not | ||
# included either by default. The virtualenv.pyz app cures all these issues. | ||
|
||
VENV_DIR="$1" | ||
if [ ! -f "$CFG_BIN_DIR/python" ]; then | ||
|
||
mkdir -p "$CFG_ROOT_DIR/$VENV_DIR" | ||
|
||
if [ -f "$CFG_ROOT_DIR/etc/thirdparty/virtualenv.pyz" ]; then | ||
VIRTUALENV_PYZ="$CFG_ROOT_DIR/etc/thirdparty/virtualenv.pyz" | ||
else | ||
VIRTUALENV_PYZ="$CFG_ROOT_DIR/$VENV_DIR/virtualenv.pyz" | ||
wget -O "$VIRTUALENV_PYZ" "$VIRTUALENV_PYZ_URL" | ||
fi | ||
|
||
$PYTHON_EXECUTABLE "$VIRTUALENV_PYZ" \ | ||
--wheel embed --pip embed --setuptools embed \ | ||
--seeder pip \ | ||
--never-download \ | ||
--no-periodic-update \ | ||
--no-vcs-ignore \ | ||
$CFG_QUIET \ | ||
"$CFG_ROOT_DIR/$VENV_DIR" | ||
fi | ||
} | ||
|
||
|
||
install_packages() { | ||
# install requirements in virtualenv | ||
# note: --no-build-isolation means that pip/wheel/setuptools will not | ||
# be reinstalled a second time and reused from the virtualenv and this | ||
# speeds up the installation. | ||
# We always have the PEP517 build dependencies installed already. | ||
|
||
"$CFG_BIN_DIR/pip" install \ | ||
--upgrade \ | ||
--no-build-isolation \ | ||
$CFG_QUIET \ | ||
$PIP_EXTRA_ARGS \ | ||
$1 | ||
} | ||
|
||
|
||
################################ | ||
# Main command line entry point | ||
CFG_DEV_MODE=0 | ||
CFG_REQUIREMENTS=$REQUIREMENTS | ||
|
||
case "$CLI_ARGS" in | ||
--help) cli_help;; | ||
--clean) clean;; | ||
--dev) CFG_REQUIREMENTS="$DEV_REQUIREMENTS" && CFG_DEV_MODE=1;; | ||
esac | ||
|
||
create_virtualenv "$VIRTUALENV_DIR" | ||
install_packages "$CFG_REQUIREMENTS" | ||
. "$CFG_BIN_DIR/activate" | ||
|
||
set +e |
Oops, something went wrong.