Skip to content

Commit ac9c505

Browse files
committed
Merge latest skeleton
Signed-off-by: Philippe Ombredanne <pombredanne@nexb.com>
2 parents a073286 + a75737d commit ac9c505

File tree

11 files changed

+321
-164
lines changed

11 files changed

+321
-164
lines changed

.gitattributes

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# Ignore all Git auto CR/LF line endings conversions
2-
* binary
2+
* -text
3+
pyproject.toml export-subst

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ python:
1515
- "3.8"
1616

1717
# Scripts to run at install stage
18-
install: ./configure
18+
install: ./configure --dev
1919

2020
# Scripts to run at script stage
2121
script: tmp/bin/pytest

CHANGELOG.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Changelog
22
=========
33

44
v (next)
5-
--------------
5+
--------
66

77
- Add support for VMDK, QCOW and VDI VM image filesystems extraction
88

README.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ decompressor function. It can handle multi-level archives such as tar.gz and
2929
can extract recursively nested archives.
3030

3131

32-
3332
Visit https://aboutcode.org and https://github.com/nexB/ for support and download.
3433

3534
To set up the development environment::
@@ -110,15 +109,15 @@ ExtractCode will use these environment variables if set:
110109
shared library used to support some of the archive formats. If not provided,
111110
ExtractCode will look for a plugin-provided libarchive library path. See
112111
https://github.com/nexB/scancode-plugins/tree/main/builtins for such plugins.
113-
112+
114113
If no plugin contributes libarchive, then a final attempt is made to look for
115114
it in the PATH using standard DLL loading techniques.
116115

117116
- EXTRACTCODE_7Z_PATH : the path to the ``7z`` 7zip executable used to support
118117
some of the archive formats. If not provided, ExtractCode will look for a
119118
plugin-provided 7z executable path. See
120119
https://github.com/nexB/scancode-plugins/tree/main/builtins for such plugins.
121-
120+
122121
If no plugin contributes 7z, then a final attempt is made to look for
123122
it in the PATH.
124123

azure-pipelines.yml

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,39 @@
77

88
jobs:
99

10-
- template: etc/ci/azure-linux.yml
10+
- template: etc/ci/azure-posix.yml
1111
parameters:
1212
job_name: ubuntu16_cpython
1313
image_name: ubuntu-16.04
1414
python_versions: ['3.6', '3.7', '3.8', '3.9']
1515
test_suites:
1616
all: tmp/bin/pytest -vvs
1717

18-
- template: etc/ci/azure-linux.yml
18+
- template: etc/ci/azure-posix.yml
1919
parameters:
2020
job_name: ubuntu18_cpython
2121
image_name: ubuntu-18.04
2222
python_versions: ['3.6', '3.7', '3.8', '3.9']
2323
test_suites:
24-
all:
25-
- apt-get install libguestfs-tools
26-
- tmp/bin/pytest -n 2 -vvs
24+
all: apt-get install libguestfs-tools && tmp/bin/pytest -n 2 -vvs
2725

28-
- template: etc/ci/azure-linux.yml
26+
- template: etc/ci/azure-posix.yml
2927
parameters:
3028
job_name: ubuntu20_cpython
3129
image_name: ubuntu-20.04
3230
python_versions: ['3.6', '3.7', '3.8', '3.9']
3331
test_suites:
34-
all:
35-
- tmp/bin/pytest -n 2 -vvs
32+
all: apt-get install libguestfs-tools && tmp/bin/pytest -n 2 -vvs
3633

37-
- template: etc/ci/azure-mac.yml
34+
- template: etc/ci/azure-posix.yml
3835
parameters:
3936
job_name: macos1014_cpython
4037
image_name: macos-10.14
4138
python_versions: ['3.6', '3.7', '3.8', '3.9']
4239
test_suites:
4340
all: tmp/bin/pytest -n 2 -vvs
4441

45-
- template: etc/ci/azure-mac.yml
42+
- template: etc/ci/azure-posix.yml
4643
parameters:
4744
job_name: macos1015_cpython
4845
image_name: macos-10.15

configure

Lines changed: 145 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,169 @@
11
#!/usr/bin/env bash
22
#
3-
# Copyright (c) nexB Inc. and others.
3+
# Copyright (c) nexB Inc. and others. All rights reserved.
44
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/nexB/ for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
58
#
69

710
set -e
811
#set -x
912

10-
# source this script for a basic setup and configuration for local development
13+
################################
14+
# A configuration script to set things up:
15+
# create a virtualenv and install or update thirdparty packages.
16+
# Source this script for initial configuration
17+
# Use configure --help for details
18+
#
19+
# This script will search for a virtualenv.pyz app in etc/thirdparty/virtualenv.pyz
20+
# Otherwise it will download the latest from the VIRTUALENV_PYZ_URL default
21+
################################
22+
CLI_ARGS=$1
1123

12-
CONFIGURE_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
24+
################################
25+
# Defaults. Change these variables to customize this script
26+
################################
1327

28+
# Requirement arguments passed to pip and used by default or with --dev.
29+
REQUIREMENTS="--editable .[full]"
30+
DEV_REQUIREMENTS="--editable .[full,testing]"
1431

15-
if [[ "$1" == "--clean" ]]; then
16-
rm -rf "$CONFIGURE_ROOT_DIR/tmp"
17-
exit
32+
# where we create a virtualenv
33+
VIRTUALENV_DIR=tmp
34+
35+
# Cleanable files and directories with the --clean option
36+
CLEANABLE="
37+
build
38+
tmp"
39+
40+
# extra arguments passed to pip
41+
PIP_EXTRA_ARGS=" "
42+
43+
# the URL to download virtualenv.pyz if needed
44+
VIRTUALENV_PYZ_URL=https://bootstrap.pypa.io/virtualenv.pyz
45+
################################
46+
47+
48+
################################
49+
# Current directory where this script lives
50+
CFG_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
51+
CFG_BIN_DIR=$CFG_ROOT_DIR/$VIRTUALENV_DIR/bin
52+
53+
54+
################################
55+
# Set the quiet flag to empty if not defined
56+
if [[ "$CFG_QUIET" == "" ]]; then
57+
CFG_QUIET=" "
1858
fi
1959

2060

21-
if [[ "$PYTHON_EXE" == "" ]]; then
22-
PYTHON_EXE=python3
61+
################################
62+
# find a proper Python to run
63+
# Use environment variables or a file if available.
64+
# Otherwise the latest Python by default.
65+
if [[ "$PYTHON_EXECUTABLE" == "" ]]; then
66+
# check for a file named PYTHON_EXECUTABLE
67+
if [ -f "$CFG_ROOT_DIR/PYTHON_EXECUTABLE" ]; then
68+
PYTHON_EXECUTABLE=$(cat "$CFG_ROOT_DIR/PYTHON_EXECUTABLE")
69+
else
70+
PYTHON_EXECUTABLE=python3
71+
fi
2372
fi
2473

2574

26-
function setup {
27-
# create a virtualenv on Python
28-
mkdir -p $CONFIGURE_ROOT_DIR/tmp
29-
wget -O $CONFIGURE_ROOT_DIR/tmp/virtualenv.pyz https://bootstrap.pypa.io/virtualenv.pyz
30-
$PYTHON_EXE $CONFIGURE_ROOT_DIR/tmp/virtualenv.pyz $CONFIGURE_ROOT_DIR/tmp
31-
source $CONFIGURE_ROOT_DIR/tmp/bin/activate
32-
$CONFIGURE_ROOT_DIR/tmp/bin/pip install --upgrade pip virtualenv setuptools wheel
75+
################################
76+
cli_help() {
77+
echo An initial configuration script
78+
echo " usage: ./configure [options]"
79+
echo
80+
echo The default is to configure for regular use. Use --dev for development.
81+
echo
82+
echo The options are:
83+
echo " --clean: clean built and installed files and exit."
84+
echo " --dev: configure the environment for development."
85+
echo " --help: display this help message and exit."
86+
echo
87+
echo By default, the python interpreter version found in the path is used.
88+
echo Alternatively, the PYTHON_EXECUTABLE environment variable can be set to
89+
echo configure another Python executable interpreter to use. If this is not
90+
echo set, a file named PYTHON_EXECUTABLE containing a single line with the
91+
echo path of the Python executable to use will be checked last.
92+
set +e
93+
exit
3394
}
3495

3596

36-
setup
97+
clean() {
98+
# Remove cleanable file and directories and files from the root dir.
99+
echo "* Cleaning ..."
100+
for cln in $CLEANABLE;
101+
do rm -rf "${CFG_ROOT_DIR:?}/${cln:?}";
102+
done
103+
set +e
104+
exit
105+
}
37106

38-
$CONFIGURE_ROOT_DIR/tmp/bin/pip install -e .[full] -e .[testing]
39107

40-
if [ -f "$CONFIGURE_ROOT_DIR/tmp/bin/activate" ]; then
41-
source "$CONFIGURE_ROOT_DIR/tmp/bin/activate"
42-
fi
108+
create_virtualenv() {
109+
# create a virtualenv for Python
110+
# Note: we do not use the bundled Python 3 "venv" because its behavior and
111+
# presence is not consistent across Linux distro and sometimes pip is not
112+
# included either by default. The virtualenv.pyz app cures all these issues.
113+
114+
VENV_DIR="$1"
115+
if [ ! -f "$CFG_BIN_DIR/python" ]; then
116+
117+
mkdir -p "$CFG_ROOT_DIR/$VENV_DIR"
118+
119+
if [ -f "$CFG_ROOT_DIR/etc/thirdparty/virtualenv.pyz" ]; then
120+
VIRTUALENV_PYZ="$CFG_ROOT_DIR/etc/thirdparty/virtualenv.pyz"
121+
else
122+
VIRTUALENV_PYZ="$CFG_ROOT_DIR/$VENV_DIR/virtualenv.pyz"
123+
wget -O "$VIRTUALENV_PYZ" "$VIRTUALENV_PYZ_URL"
124+
fi
125+
126+
$PYTHON_EXECUTABLE "$VIRTUALENV_PYZ" \
127+
--wheel embed --pip embed --setuptools embed \
128+
--seeder pip \
129+
--never-download \
130+
--no-periodic-update \
131+
--no-vcs-ignore \
132+
$CFG_QUIET \
133+
"$CFG_ROOT_DIR/$VENV_DIR"
134+
fi
135+
}
136+
137+
138+
install_packages() {
139+
# install requirements in virtualenv
140+
# note: --no-build-isolation means that pip/wheel/setuptools will not
141+
# be reinstalled a second time and reused from the virtualenv and this
142+
# speeds up the installation.
143+
# We always have the PEP517 build dependencies installed already.
144+
145+
"$CFG_BIN_DIR/pip" install \
146+
--upgrade \
147+
--no-build-isolation \
148+
$CFG_QUIET \
149+
$PIP_EXTRA_ARGS \
150+
$1
151+
}
152+
153+
154+
################################
155+
# Main command line entry point
156+
CFG_DEV_MODE=0
157+
CFG_REQUIREMENTS=$REQUIREMENTS
158+
159+
case "$CLI_ARGS" in
160+
--help) cli_help;;
161+
--clean) clean;;
162+
--dev) CFG_REQUIREMENTS="$DEV_REQUIREMENTS" && CFG_DEV_MODE=1;;
163+
esac
164+
165+
create_virtualenv "$VIRTUALENV_DIR"
166+
install_packages "$CFG_REQUIREMENTS"
167+
. "$CFG_BIN_DIR/activate"
43168

44169
set +e

0 commit comments

Comments
 (0)