summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2020-05-01 22:33:22 +0200
committerGitHub <noreply@github.com>2020-05-01 22:33:22 +0200
commitf6b011fdf8a6d46bee59d62107a801eda7b41a99 (patch)
treed1d668710f3b8c53d925076da9c2144a5e5809f7
parent200c56667fd8446056ec365b95ea2dccdd0a9a1b (diff)
parentb536c087bf5fc76febff44ea38315928beb0e168 (diff)
downloadsetuptools-scm-f6b011fdf8a6d46bee59d62107a801eda7b41a99.tar.gz
Merge pull request #383 from pypa/workflows
switch to github action
-rw-r--r--.github/workflows/pre-commit.yml20
-rw-r--r--.github/workflows/python-tests.yml94
-rw-r--r--.travis.yml40
-rw-r--r--appveyor.yml43
-rw-r--r--setup.py2
-rw-r--r--src/setuptools_scm/file_finder_git.py3
-rw-r--r--testing/conftest.py17
-rw-r--r--testing/test_file_finder.py68
-rw-r--r--testing/test_git.py31
-rw-r--r--testing/test_mercurial.py18
10 files changed, 193 insertions, 143 deletions
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
new file mode 100644
index 0000000..c154a12
--- /dev/null
+++ b/.github/workflows/pre-commit.yml
@@ -0,0 +1,20 @@
+name: pre-commit
+
+on:
+ pull_request:
+ push:
+ branches: [master]
+
+jobs:
+ pre-commit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-python@v1
+ - name: set PY
+ run: echo "::set-env name=PY::$(python --version --version | sha256sum | cut -d' ' -f1)"
+ - uses: actions/cache@v1
+ with:
+ path: ~/.cache/pre-commit
+ key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
+ - uses: pre-commit/action@v1.0.0
diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
new file mode 100644
index 0000000..4822766
--- /dev/null
+++ b/.github/workflows/python-tests.yml
@@ -0,0 +1,94 @@
+name: python tests+artifacts+release
+
+on:
+ pull_request:
+ push:
+ branches: [master]
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ python_version: [ '2.7', '3.5', '3.6', '3.7', '3.8', 'pypy2', 'pypy3' ]
+ os: [windows-latest, ubuntu-latest] #, macos-latest]
+ exclude:
+ - os: windows-latest
+ python_version: "2.7"
+ - os: windows-latest
+ python_version: "pypy2"
+ name: ${{ matrix.os }} - Python ${{ matrix.python_version }}
+ steps:
+ - uses: actions/checkout@v1
+ - name: Setup python
+ uses: actions/setup-python@v1
+ with:
+ python-version: ${{ matrix.python_version }}
+ architecture: x64
+ - run: pip install -e .[toml] pytest
+ - run: pytest
+
+
+ eggs:
+ runs-on: ubuntu-latest
+
+ needs: [build]
+ name: Python ${{ matrix.python_version }} eggs
+ strategy:
+ matrix:
+ python_version: ['2.7', '3.5', '3.6', '3.7', '3.8']
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ with:
+ python-version: ${{ matrix.python_version }}
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install --upgrade wheel setuptools
+ - name: Build package
+ run: |
+ python setup.py bdist_egg
+ - uses: actions/upload-artifact@v2
+ with:
+ name: dist
+ path: dist
+
+ dist:
+ runs-on: ubuntu-latest
+
+ needs: [build]
+ name: Python bdist/wheel
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-python@v1
+ with:
+ python-version: "3.8"
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install --upgrade wheel setuptools
+ - name: Build package
+ run: |
+ python setup.py bdist_wheel sdist
+ - uses: actions/upload-artifact@v2
+ with:
+ name: dist
+ path: dist
+
+ dist_upload:
+
+ runs-on: ubuntu-latest
+ if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && github.repository == 'pypa/setuptools_scm'
+ needs: [eggs, dist]
+ steps:
+ - uses: actions/download-artifact@v2
+ with:
+ name: dist
+ - name: Publish package to PyPI
+ uses: pypa/gh-action-pypi-publish@master
+ with:
+ user: __token__
+ password: ${{ secrets.pypi_token }}
diff --git a/.travis.yml b/.travis.yml
index 75c3c0e..fa22d9b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,11 +19,7 @@ credentials:
tags: yes
python:
- '2.7'
-- '3.4'
-- '3.5'
-- '3.6'
- '3.7'
-- '3.8-dev'
dist: xenial # needed for 3.7+
env:
- TOXENV=py-test
@@ -34,9 +30,6 @@ jobs:
name: check readme
python: '3.6'
env: TOXENV=check_readme
- # - stage: test
- # python: '3.7'
- # dist: xenial
- stage: test
python: '2.7'
env: SELFINSTALL=1
@@ -44,16 +37,6 @@ jobs:
python: '3.6'
env: SELFINSTALL=1
- - stage: linting
- python: '3.6'
- name: validate pre-commit
- env:
- install:
- - pip install pre-commit
- - pre-commit install-hooks
- script:
- - pre-commit run --all-files
-
- &deploy
stage: deploy
name: "modern distributions"
@@ -65,29 +48,6 @@ jobs:
<<: *pypi
distributions: "sdist bdist_wheel"
- - &bdist_egg
- <<: *deploy
- name: "python eggs 2.7"
- python: '2.7'
- deploy:
- <<: *pypi
- distributions: "bdist_egg"
- - <<: *bdist_egg
- name: "python eggs 3.4"
- python: '3.4'
- - <<: *bdist_egg
- name: "python eggs 3.5"
- python: '3.5'
- - <<: *bdist_egg
- name: "python eggs 3.6"
- python: '3.6'
- - <<: *bdist_egg
- name: "python eggs 3.7"
- python: '3.7'
- - <<: *bdist_egg
- name: "python eggs 3.8"
- python: '3.8-dev'
-
cache:
directories:
- $HOME/.cache/pip
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 5319f7c..0000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-environment:
- matrix:
- - PYTHON: "C:\\Python27"
- TOXENV: "py-test"
-
- - PYTHON: "C:\\Python27-x64"
- TOXENV: "py-test"
-
- - PYTHON: "C:\\Python34"
- TOXENV: "py-test"
-
- - PYTHON: "C:\\Python34-x64"
- TOXENV: "py-test"
-
-init:
- - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
-
- - ECHO "Updating Environment"
- - python -m pip install -U pip
- - python -m pip install -U pep517
- - python -m pip install -U --upgrade-strategy=eager tox
-
-
-install:
- # Check that we have the expected version and architecture for Python
- - python -c "import sys, os;sys.stdout.write(str(sys.version) + os.linesep)"
- - "python -c \"import struct; print(struct.calcsize('P') * 8)\""
- - python -m pip list
-
-build: false # Not a C# project, build stuff at the test step instead.
-
-test_script:
- # Build the compiled extension and run the project tests
- - python -m tox
-
-after_test:
- # If tests are successful, create a whl package for the project.
- - python -m pep517.build --binary .
- - ps: "ls dist"
-
-artifacts:
- # Archive the generated wheel package in the ci.appveyor.com build report.
- - path: dist\*
diff --git a/setup.py b/setup.py
index 9dd2566..586d3e5 100644
--- a/setup.py
+++ b/setup.py
@@ -115,7 +115,7 @@ arguments = dict(
"Topic :: Utilities",
],
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
- extras_require=dict(toml=["toml"]),
+ extras_require=dict(toml=["toml", "setuptools>=42"]),
)
if __name__ == "__main__":
diff --git a/src/setuptools_scm/file_finder_git.py b/src/setuptools_scm/file_finder_git.py
index 8b81d2c..9aa6245 100644
--- a/src/setuptools_scm/file_finder_git.py
+++ b/src/setuptools_scm/file_finder_git.py
@@ -62,5 +62,8 @@ def git_find_files(path=""):
toplevel = _git_toplevel(path)
if not toplevel:
return []
+ fullpath = os.path.abspath(os.path.normpath(path))
+ if not fullpath.startswith(toplevel):
+ trace("toplevel mismatch", toplevel, fullpath)
git_files, git_dirs = _git_ls_files_and_dirs(toplevel)
return scm_find_files(path, git_files, git_dirs)
diff --git a/testing/conftest.py b/testing/conftest.py
index 0d34731..5cb65f6 100644
--- a/testing/conftest.py
+++ b/testing/conftest.py
@@ -1,6 +1,7 @@
import os
import itertools
import pytest
+import six
os.environ["SETUPTOOLS_SCM_DEBUG"] = "1"
VERSION_PKGS = ["setuptools", "setuptools_scm"]
@@ -21,6 +22,9 @@ class Wd(object):
commit_command = None
add_command = None
+ def __repr__(self):
+ return "<WD {cwd}>".format(cwd=self.cwd)
+
def __init__(self, cwd):
self.cwd = cwd
self.__counter = itertools.count()
@@ -33,10 +37,13 @@ class Wd(object):
return do(cmd, self.cwd)
def write(self, name, value, **kw):
- filename = self.cwd.join(name)
+ filename = self.cwd / name
if kw:
value = value.format(**kw)
- filename.write(value)
+ if isinstance(value, six.text_type):
+ filename.write_text(value)
+ else:
+ filename.write_bytes(value)
return filename
def _reason(self, given_reason):
@@ -83,5 +90,7 @@ def debug_mode():
@pytest.fixture
-def wd(tmpdir):
- return Wd(tmpdir.ensure("wd", dir=True))
+def wd(tmp_path):
+ target_wd = tmp_path.resolve() / "wd"
+ target_wd.mkdir()
+ return Wd(target_wd)
diff --git a/testing/test_file_finder.py b/testing/test_file_finder.py
index 825f1c3..c9409c4 100644
--- a/testing/test_file_finder.py
+++ b/testing/test_file_finder.py
@@ -7,7 +7,7 @@ from setuptools_scm.integration import find_files
@pytest.fixture(params=["git", "hg"])
-def inwd(request, wd):
+def inwd(request, wd, monkeypatch):
if request.param == "git":
wd("git init")
wd("git config user.email test@example.com")
@@ -18,14 +18,16 @@ def inwd(request, wd):
wd("hg init")
wd.add_command = "hg add ."
wd.commit_command = 'hg commit -m test-{reason} -u test -d "0 0"'
- (wd.cwd / "file1").ensure(file=True)
- adir = (wd.cwd / "adir").ensure(dir=True)
- (adir / "filea").ensure(file=True)
- bdir = (wd.cwd / "bdir").ensure(dir=True)
- (bdir / "fileb").ensure(file=True)
+ (wd.cwd / "file1").touch()
+ adir = wd.cwd / "adir"
+ adir.mkdir()
+ (adir / "filea").touch()
+ bdir = wd.cwd / "bdir"
+ bdir.mkdir()
+ (bdir / "fileb").touch()
wd.add_and_commit()
- with wd.cwd.as_cwd():
- yield wd
+ monkeypatch.chdir(wd.cwd)
+ yield wd
def _sep(paths):
@@ -39,14 +41,14 @@ def test_basic(inwd):
def test_whitespace(inwd):
- (inwd.cwd / "adir" / "space file").ensure(file=True)
+ (inwd.cwd / "adir" / "space file").touch()
inwd.add_and_commit()
assert set(find_files("adir")) == _sep({"adir/space file", "adir/filea"})
def test_case(inwd):
- (inwd.cwd / "CamelFile").ensure(file=True)
- (inwd.cwd / "file2").ensure(file=True)
+ (inwd.cwd / "CamelFile").touch()
+ (inwd.cwd / "file2").touch()
inwd.add_and_commit()
assert set(find_files()) == _sep(
{"CamelFile", "file2", "file1", "adir/filea", "bdir/fileb"}
@@ -55,14 +57,14 @@ def test_case(inwd):
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks to dir not supported")
def test_symlink_dir(inwd):
- (inwd.cwd / "adir" / "bdirlink").mksymlinkto("../bdir")
+ (inwd.cwd / "adir" / "bdirlink").symlink_to("../bdir")
inwd.add_and_commit()
assert set(find_files("adir")) == _sep({"adir/filea", "adir/bdirlink/fileb"})
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks to dir not supported")
def test_symlink_dir_source_not_in_scm(inwd):
- (inwd.cwd / "adir" / "bdirlink").mksymlinkto("../bdir")
+ (inwd.cwd / "adir" / "bdirlink").symlink_to("../bdir")
assert set(find_files("adir")) == _sep({"adir/filea"})
@@ -70,7 +72,7 @@ def test_symlink_dir_source_not_in_scm(inwd):
sys.platform == "win32", reason="symlinks to files not supported on windows"
)
def test_symlink_file(inwd):
- (inwd.cwd / "adir" / "file1link").mksymlinkto("../file1")
+ (inwd.cwd / "adir" / "file1link").symlink_to("../file1")
inwd.add_and_commit()
assert set(find_files("adir")) == _sep(
{"adir/filea", "adir/file1link"}
@@ -81,28 +83,28 @@ def test_symlink_file(inwd):
sys.platform == "win32", reason="symlinks to files not supported on windows"
)
def test_symlink_file_source_not_in_scm(inwd):
- (inwd.cwd / "adir" / "file1link").mksymlinkto("../file1")
+ (inwd.cwd / "adir" / "file1link").symlink_to("../file1")
assert set(find_files("adir")) == _sep({"adir/filea"})
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks to dir not supported")
def test_symlink_loop(inwd):
- (inwd.cwd / "adir" / "loop").mksymlinkto("../adir")
+ (inwd.cwd / "adir" / "loop").symlink_to("../adir")
inwd.add_and_commit()
assert set(find_files("adir")) == _sep({"adir/filea", "adir/loop"}) # -> ../adir
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks to dir not supported")
def test_symlink_loop_outside_path(inwd):
- (inwd.cwd / "bdir" / "loop").mksymlinkto("../bdir")
- (inwd.cwd / "adir" / "bdirlink").mksymlinkto("../bdir")
+ (inwd.cwd / "bdir" / "loop").symlink_to("../bdir")
+ (inwd.cwd / "adir" / "bdirlink").symlink_to("../bdir")
inwd.add_and_commit()
assert set(find_files("adir")) == _sep({"adir/filea", "adir/bdirlink/fileb"})
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks to dir not supported")
def test_symlink_dir_out_of_git(inwd):
- (inwd.cwd / "adir" / "outsidedirlink").mksymlinkto(os.path.join(__file__, ".."))
+ (inwd.cwd / "adir" / "outsidedirlink").symlink_to(os.path.join(__file__, ".."))
inwd.add_and_commit()
assert set(find_files("adir")) == _sep({"adir/filea"})
@@ -111,23 +113,23 @@ def test_symlink_dir_out_of_git(inwd):
sys.platform == "win32", reason="symlinks to files not supported on windows"
)
def test_symlink_file_out_of_git(inwd):
- (inwd.cwd / "adir" / "outsidefilelink").mksymlinkto(__file__)
+ (inwd.cwd / "adir" / "outsidefilelink").symlink_to(__file__)
inwd.add_and_commit()
assert set(find_files("adir")) == _sep({"adir/filea"})
def test_empty_root(inwd):
subdir = inwd.cwd / "cdir" / "subdir"
- subdir.ensure(dir=True)
- (subdir / "filec").ensure(file=True)
+ subdir.mkdir(parents=True)
+ (subdir / "filec").touch()
inwd.add_and_commit()
assert set(find_files("cdir")) == _sep({"cdir/subdir/filec"})
def test_empty_subdir(inwd):
subdir = inwd.cwd / "adir" / "emptysubdir" / "subdir"
- subdir.ensure(dir=True)
- (subdir / "xfile").ensure(file=True)
+ subdir.mkdir(parents=True)
+ (subdir / "xfile").touch()
inwd.add_and_commit()
assert set(find_files("adir")) == _sep(
{"adir/filea", "adir/emptysubdir/subdir/xfile"}
@@ -136,10 +138,10 @@ def test_empty_subdir(inwd):
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks not supported on windows")
def test_double_include_through_symlink(inwd):
- (inwd.cwd / "data").ensure(dir=True)
- (inwd.cwd / "data" / "datafile").ensure(file=True)
- (inwd.cwd / "adir" / "datalink").mksymlinkto("../data")
- (inwd.cwd / "adir" / "filealink").mksymlinkto("filea")
+ (inwd.cwd / "data").mkdir()
+ (inwd.cwd / "data" / "datafile").touch()
+ (inwd.cwd / "adir" / "datalink").symlink_to("../data")
+ (inwd.cwd / "adir" / "filealink").symlink_to("filea")
inwd.add_and_commit()
assert set(find_files()) == _sep(
{
@@ -155,17 +157,17 @@ def test_double_include_through_symlink(inwd):
@pytest.mark.skipif(sys.platform == "win32", reason="symlinks not supported on windows")
def test_symlink_not_in_scm_while_target_is(inwd):
- (inwd.cwd / "data").ensure(dir=True)
- (inwd.cwd / "data" / "datafile").ensure(file=True)
+ (inwd.cwd / "data").mkdir()
+ (inwd.cwd / "data" / "datafile").touch()
inwd.add_and_commit()
- (inwd.cwd / "adir" / "datalink").mksymlinkto("../data")
- (inwd.cwd / "adir" / "filealink").mksymlinkto("filea")
+ (inwd.cwd / "adir" / "datalink").symlink_to("../data")
+ (inwd.cwd / "adir" / "filealink").symlink_to("filea")
assert set(find_files()) == _sep(
{
"file1",
"adir/filea",
# adir/datalink and adir/afilelink not included
- # because the symlink themselves are not in scm
+ # because the symlink_to themselves are not in scm
"bdir/fileb",
"data/datafile",
}
diff --git a/testing/test_git.py b/testing/test_git.py
index 8416571..ac45b5b 100644
--- a/testing/test_git.py
+++ b/testing/test_git.py
@@ -34,9 +34,10 @@ def test_parse_describe_output(given, tag, number, node, dirty):
def test_root_relative_to(tmpdir, wd, monkeypatch):
monkeypatch.delenv("SETUPTOOLS_SCM_DEBUG")
- p = wd.cwd.ensure("sub/package", dir=1)
- p.join("setup.py").write(
- """from setuptools import setup
+ p = wd.cwd.joinpath("sub/package")
+ p.mkdir(parents=True)
+ p.joinpath("setup.py").write_text(
+ u"""from setuptools import setup
setup(use_scm_version={"root": "../..",
"relative_to": __file__})
"""
@@ -159,8 +160,10 @@ def test_git_shallow_autocorrect(shallow_wd, recwarn):
def test_find_files_stop_at_root_git(wd):
wd.commit_testfile()
- wd.cwd.ensure("project/setup.cfg")
- assert integration.find_files(str(wd.cwd / "project")) == []
+ project = wd.cwd / "project"
+ project.mkdir()
+ project.joinpath("setup.cfg").touch()
+ assert integration.find_files(str(project)) == []
@pytest.mark.issue(128)
@@ -175,7 +178,7 @@ def test_alphanumeric_tags_match(wd):
assert wd.version.startswith("0.1.dev1+g")
-def test_git_archive_export_ignore(wd):
+def test_git_archive_export_ignore(wd, monkeypatch):
wd.write("test1.txt", "test")
wd.write("test2.txt", "test")
wd.write(
@@ -186,28 +189,28 @@ def test_git_archive_export_ignore(wd):
)
wd("git add test1.txt test2.txt")
wd.commit()
- with wd.cwd.as_cwd():
- assert integration.find_files(".") == [opj(".", "test1.txt")]
+ monkeypatch.chdir(wd.cwd)
+ assert integration.find_files(".") == [opj(".", "test1.txt")]
@pytest.mark.issue(228)
-def test_git_archive_subdirectory(wd):
+def test_git_archive_subdirectory(wd, monkeypatch):
wd("mkdir foobar")
wd.write("foobar/test1.txt", "test")
wd("git add foobar")
wd.commit()
- with wd.cwd.as_cwd():
- assert integration.find_files(".") == [opj(".", "foobar", "test1.txt")]
+ monkeypatch.chdir(wd.cwd)
+ assert integration.find_files(".") == [opj(".", "foobar", "test1.txt")]
@pytest.mark.issue(251)
-def test_git_archive_run_from_subdirectory(wd):
+def test_git_archive_run_from_subdirectory(wd, monkeypatch):
wd("mkdir foobar")
wd.write("foobar/test1.txt", "test")
wd("git add foobar")
wd.commit()
- with (wd.cwd / "foobar").as_cwd():
- assert integration.find_files(".") == [opj(".", "test1.txt")]
+ monkeypatch.chdir(wd.cwd / "foobar")
+ assert integration.find_files(".") == [opj(".", "test1.txt")]
def test_git_feature_branch_increments_major(wd):
diff --git a/testing/test_mercurial.py b/testing/test_mercurial.py
index 40f9409..c20c2fd 100644
--- a/testing/test_mercurial.py
+++ b/testing/test_mercurial.py
@@ -38,15 +38,17 @@ def test_archival_to_version(expected, data):
)
-def test_find_files_stop_at_root_hg(wd):
+def test_find_files_stop_at_root_hg(wd, monkeypatch):
wd.commit_testfile()
- wd.cwd.ensure("project/setup.cfg")
+ project = wd.cwd / "project"
+ project.mkdir()
+ project.joinpath("setup.cfg").touch()
# setup.cfg has not been committed
- assert integration.find_files(str(wd.cwd / "project")) == []
+ assert integration.find_files(str(project)) == []
# issue 251
wd.add_and_commit()
- with (wd.cwd / "project").as_cwd():
- assert integration.find_files() == ["setup.cfg"]
+ monkeypatch.chdir(project)
+ assert integration.find_files() == ["setup.cfg"]
# XXX: better tests for tag prefixes
@@ -81,7 +83,7 @@ def test_version_from_hg_id(wd):
def test_version_from_archival(wd):
# entrypoints are unordered,
# cleaning the wd ensure this test wont break randomly
- wd.cwd.join(".hg").remove()
+ wd.cwd.joinpath(".hg").rename(wd.cwd / ".nothg")
wd.write(".hg_archival.txt", "node: 000000000000\n" "tag: 0.1\n")
assert wd.version == "0.1"
@@ -144,8 +146,8 @@ def test_version_bump_from_merge_commit(wd):
def test_version_bump_from_commit_including_hgtag_mods(wd):
""" Test the case where a commit includes changes to .hgtags and other files
"""
- with wd.cwd.join(".hgtags").open("a") as tagfile:
- tagfile.write("0 0\n")
+ with wd.cwd.joinpath(".hgtags").open("ab") as tagfile:
+ tagfile.write(b"0 0\n")
wd.write("branchfile", "branchtext")
wd(wd.add_command)
assert wd.version.startswith("1.0.1.dev1+") # bump from dirty version