Giter VIP home page Giter VIP logo

setuptools_scm_git_archive's Introduction

This plugin is obsolete. ``setuptools_scm >= 7.0.0`` supports Git archives by itself.

Migration guide

Change the contents of the .git_archival.txt file in the root directory of your repository from:

ref-names: $Format:%D$

to:

node: $Format:%H$
node-date: $Format:%cI$
describe-name: $Format:%(describe:tags=true)$
ref-names: $Format:%D$

Remove setuptools_scm_git_archive from your project's dependencies (e.g. the setup_requires list in your setup.py file).

setuptools_scm_git_archive's People

Contributors

abolger avatar changaco avatar cyraxjoe avatar djhoese avatar richardsheridan avatar ronnypfannschmidt avatar taldcroft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

setuptools_scm_git_archive's Issues

pytest warnings when running tests

On OpenBSD -current both py2 and py3 result in the following warnings when running tests. Is this expected or do I need to make some other adjustment since the test seems to pass fine?

============================================================================================================ test session starts ============================================================================================================
platform openbsd6 -- Python 3.6.7, pytest-3.5.0, py-1.5.3, pluggy-0.6.0 -- /usr/local/bin/python3.6
cachedir: .pytest_cache
rootdir: /usr/ports/pobj/py-setuptools_scm_git_archive-1.0-python3/setuptools_scm_git_archive-1.0, inifile:
plugins: cov-2.5.1
collected 3 items                                                                                                                                                                                                                           

tests.py::test_archival_to_version[1.0-data0] PASSED                                                                                                                                                                                  [ 33%]
tests.py::test_archival_to_version[1.1-data1] PASSED                                                                                                                                                                                  [ 66%]
tests.py::test_archival_to_version[1.2-data2] PASSED                                                                                                                                                                                  [100%]

============================================================================================================= warnings summary ==============================================================================================================
tests.py::test_archival_to_version[1.0-data0]
  /usr/local/lib/python3.6/site-packages/setuptools_scm/version.py:92: UserWarning: tag 'foo' no version found
    warnings.warn("tag %r no version found" % (tag,))
  /usr/local/lib/python3.6/site-packages/setuptools_scm/version.py:199: UserWarning: meta invoked without explicit configuration, will use defaults where required.
    "meta invoked without explicit configuration,"

tests.py::test_archival_to_version[1.1-data1]
  /usr/local/lib/python3.6/site-packages/setuptools_scm/version.py:92: UserWarning: tag 'bar' no version found
    warnings.warn("tag %r no version found" % (tag,))
  /usr/local/lib/python3.6/site-packages/setuptools_scm/version.py:199: UserWarning: meta invoked without explicit configuration, will use defaults where required.
    "meta invoked without explicit configuration,"

tests.py::test_archival_to_version[1.2-data2]
  /usr/local/lib/python3.6/site-packages/setuptools_scm/version.py:199: UserWarning: meta invoked without explicit configuration, will use defaults where required.
    "meta invoked without explicit configuration,"

-- Docs: http://doc.pytest.org/en/latest/warnings.html
=================================================================================================== 3 passed, 5 warnings in 0.03 seconds ====================================================================================================

Why must it be named .git_archival.txt?

Other similar tools put the export-subst directly into a Python file.
Why should it be named .git_archival.txt?
The reason should be documented somewhere easy for readers, or it would be better if it can be configured.

Archival information is there, but setuptools_scm can't read it

Hi.

I'm trying to use the plugin for a project of mine. I followed the instructions, created the two hidden files, tagged and pushed to GitHub. When I download the archive, the right information are written into .git_archival.txt

(minvardevel) ➜  /private/tmp/MinVar-1.0.0-alpha  cat .git_archival.txt
ref-names: tag: v1.0.0-alpha, scm_git_archive

My setup.py reads as indicated in the instructions, it seems to me.

(minvardevel) ➜  /private/tmp/MinVar-1.0.0-alpha  head -7 setup.py
#!/usr/bin/env python

import setuptools

setuptools.setup(
    use_scm_version=True,
    setup_requires=['setuptools_scm', 'setuptools_scm_git_archive'],
    ...

But if I try to run it, it complains that it cannot read the version

(minvardevel) ➜  /private/tmp/MinVar-1.0.0-alpha  python setup.py develop
zip_safe flag not set; analyzing archive contents...
zip_safe flag not set; analyzing archive contents...

Installed /private/tmp/MinVar-1.0.0-alpha/.eggs/setuptools_scm_git_archive-1.0-py3.6.egg

Installed /private/tmp/MinVar-1.0.0-alpha/.eggs/setuptools_scm_git_archive-0-py3.6.egg
Searching for setuptools_scm
Reading https://pypi.python.org/simple/setuptools_scm/
Downloading https://pypi.python.org/packages/fb/22/1f1c3b223425351cf499d04ecf9673d12c4adf1c971a0d72b9cf919d4d6a/setuptools_scm-1.15.5-py3.6.egg#md5=5c831eb5f62b4503ae76090fda1b70f0
Best match: setuptools-scm 1.15.5
Processing setuptools_scm-1.15.5-py3.6.egg
Moving setuptools_scm-1.15.5-py3.6.egg to /private/tmp/MinVar-1.0.0-alpha/.eggs

Installed /private/tmp/MinVar-1.0.0-alpha/.eggs/setuptools_scm-1.15.5-py3.6.egg
Traceback (most recent call last):
  File "setup.py", line 33, in <module>
    'minvar = minvar.__main__:main'
  File "/Users/ozagordi/miniconda3/envs/minvardevel/lib/python3.6/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/ozagordi/miniconda3/envs/minvardevel/lib/python3.6/site-packages/setuptools/dist.py", line 323, in __init__
    _Distribution.__init__(self, attrs)
  File "/Users/ozagordi/miniconda3/envs/minvardevel/lib/python3.6/distutils/dist.py", line 281, in __init__
    self.finalize_options()
  File "/Users/ozagordi/miniconda3/envs/minvardevel/lib/python3.6/site-packages/setuptools/dist.py", line 392, in finalize_options
    ep.load()(self, ep.name, value)
  File "/private/tmp/MinVar-1.0.0-alpha/.eggs/setuptools_scm-1.15.5-py3.6.egg/setuptools_scm/integration.py", line 22, in version_keyword
  File "/private/tmp/MinVar-1.0.0-alpha/.eggs/setuptools_scm-1.15.5-py3.6.egg/setuptools_scm/__init__.py", line 119, in get_version
  File "/private/tmp/MinVar-1.0.0-alpha/.eggs/setuptools_scm-1.15.5-py3.6.egg/setuptools_scm/__init__.py", line 97, in _do_parse
LookupError: setuptools-scm was unable to detect version for '/private/tmp/MinVar-1.0.0-alpha'.

Make sure you're either building from a fully intact git repository or PyPI tarballs. Most other sources (such as GitHub's tarballs, a git checkout without the .git folder) don't contain the necessary metadata and will not work.

For example, if you're using pip, instead of https://github.com/user/proj/archive/master.zip use git+https://github.com/user/proj.git#egg=proj

To me it looks like setuptools_scm is not falling back on setuptools_scm_git_archive, but why?
What am I doing wrong?

I would like to access the version info programmatically, like having the version info consumed by argparser, argument -v.

Thanks.


Update

If I change the content of my .git_archival.txt to v1.0.alpha, then python setup.py develop works fine. Accessing the version returns 1.0a0. I understand now that the reason for failing was in the format of the tag, although I'm a bit surprised that it failed completely rather than emitting some warning. Something that might be worth stressing in the README, together with the fact that setting the environment variable SETUPTOOLS_SCM_DEBUG=TRUE let setup print more info.

test_archival_to_version fails

I'm looking to build this for Fedora EPEL8, but a test is failing:

+ cd setuptools_scm_git_archive-1.1
+ pytest-3 tests.py
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-3.4.2, py-1.5.3, pluggy-0.6.0
rootdir: /export/home/orion/fedora/python-setuptools_scm_git_archive/setuptools_scm_git_archive-1.1, inifile:
plugins: xdist-1.24.1, mock-1.10.4, helpers-namespace-2019.1.8, forked-1.0.2, cov-2.6.0
collected 3 items

tests.py F..                                                             [100%]

=================================== FAILURES ===================================
_____________________ test_archival_to_version[1.0-data0] ______________________

expected = '1.0', data = {'ref-names': 'HEAD -> master, tag: foo, tag: 1.0'}

    @pytest.mark.parametrize('expected,data', sorted(git_archival_mapping.items()))
    def test_archival_to_version(expected, data):
        version = archival_to_version(data)
>       assert format_version(
            version,
            version_scheme='guess-next-dev',
            local_scheme='node-and-date') == expected
E       AssertionError: assert 'foo' == '1.0'
E         - foo
E         + 1.0

tests.py:16: AssertionError
====================== 1 failed, 2 passed in 0.04 seconds ======================

Any idea what is going wrong? Thanks.

Version is not parsed

I added the required files to my git-repo as described:

# .git_archival.txt in repo
ref-names: $Format:%D$

Runing git archive --format tgz -o /tmp/archive.tgz HEAD results in

# .git_archival.txt in archive
ref-names: HEAD -> mybranch

This does not look like being a useful base for versioning.

setuptools_scm_git_archive fails to parse this (tested using the code from #14).

git 2.32 adds support for better format option

From the README:

Note that it only works for archives of tagged commits (because git currently lacks a format option equivalent to git describe --tags).

I opened a discussion on the git mailing list back in January: https://public-inbox.org/git/[email protected]/T/

As a result, the git 2.32 release notes from 17 hours ago, mention this:

  • "git log --format='...'" learned "%(describe)" placeholder.

Full documentation on the format:
https://git-scm.com/docs/git-log/2.32.0#Documentation/git-log.txt-emdescribeoptionsem

setuptools_scm_git_archive should learn to read, in addition to:

ref-names: $Format:%D$

e.g.

describe-name: $Format:%(describe:match=v[0-9]*,exclude=*rc*)$

How to get "no distance and clean" version ?

I try to release a new version: 5.0:
so I tag:

git tag -a -m 'test tag' 5.0

git describe is:

$ git describe --long
5.0-0-g0386a2c
$

I'm expecting as explain in : setuptools_scm
to get:
no distance and clean: {tag}
but I get:

distance and clean:
    {next_version}.dev{distance}+n{revision hash}

As you can see::

$ python setup.py install
...
$ ls dist/
Ble-5.1.dev0+ng0386a2c.d20161006-py2.7.egg
$ 

1.1: pytest warnings

Just normal build, install and test cycle used on building package from non-root account:

  • "setup.py build"
  • "setup.py install --root </install/prefix>"
  • "pytest with PYTHONPATH pointing to setearch and sitelib inside </install/prefix>
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-setuptools_scm_git_archive-1.1-8.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-setuptools_scm_git_archive-1.1-8.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra tests.py
=========================================================================== test session starts ============================================================================
platform linux -- Python 3.8.11, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
benchmark: 3.4.1 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/tkloczko/rpmbuild/BUILD/setuptools_scm_git_archive-1.1
plugins: forked-1.3.0, shutil-1.7.0, virtualenv-1.7.0, expect-1.1.0, httpbin-1.0.0, flake8-1.0.7, timeout-1.4.2, betamax-0.8.1, freezegun-0.4.2, case-1.5.3, isort-1.3.0, aspectlib-1.5.2, asyncio-0.15.1, toolbox-0.5, aiohttp-0.3.0, mock-3.6.1, rerunfailures-9.1.1, requests-mock-1.9.3, cov-2.12.1, pyfakefs-4.5.0, flaky-3.7.0, benchmark-3.4.1, xdist-2.3.0, pylama-7.7.1, datadir-1.3.1, regressions-2.2.0, cases-3.6.3, hypothesis-6.14.4, Faker-8.10.3, xprocess-0.18.1, black-0.3.12, checkdocs-2.7.1
collected 3 items

tests.py ...                                                                                                                                                         [100%]

============================================================================= warnings summary =============================================================================
tests.py::test_archival_to_version[1.0-data0]
  /usr/lib/python3.8/site-packages/setuptools_scm/version.py:69: UserWarning: tag 'foo' no version found
    warnings.warn(f"tag {tag!r} no version found")

tests.py::test_archival_to_version[1.0-data0]
tests.py::test_archival_to_version[1.1-data1]
tests.py::test_archival_to_version[1.2-data2]
  /usr/lib/python3.8/site-packages/setuptools_scm/version.py:189: UserWarning: meta invoked without explicit configuration, will use defaults where required.
    warnings.warn(

tests.py::test_archival_to_version[1.1-data1]
  /usr/lib/python3.8/site-packages/setuptools_scm/version.py:69: UserWarning: tag 'bar' no version found
    warnings.warn(f"tag {tag!r} no version found")

-- Docs: https://docs.pytest.org/en/stable/warnings.html
====================================================================== 3 passed, 5 warnings in 0.16s =======================================================================
pytest-xprocess reminder::Be sure to terminate the started process by running 'pytest --xkill' if you have not explicitly done so in your fixture with 'xprocess.getinfo(<process_name>).terminate()'.

Only catch tags with x.y

I've been following the documentation about .git_archival.txt and .gitattributes:

$ git ls-files | grep git
.git_archival.txt
.gitattributes
.gitignore
$ more .git_archival.txt
ref-names: $Format:%D$
$ more .gitattributes 
.git_archival.txt  export-subst

use_scm_version is set in setup.py

setup(name='Ble',
          use_scm_version=True,

I have a tag 5 on master branch seen by git describe:

$ git describe 
5-2-g0386a2c
$ git branch 
* master
$ git tag
4.0
4.2
4.2.3
5
$

But python setup.py install still create a 4.2.4 package and version number !

  ~/venv/lib/python2.7/site-packages/Ble-4.2.4.dev377+ng0386a2c-py2.7.egg

Unable to create wheel using pip

Apparently pip can't create a wheel for this package, you end up with something like:
pip wheel --no-binary ":all:" setuptools_scm_git_archive

$ pip wheel --no-binary ":all:" setuptools_scm_git_archive
Collecting setuptools_scm_git_archive
  Using cached https://files.pythonhosted.org/packages/18/00/754438f629dfff1ecdbb31c8c23effe8bcfdbf65dbaf1cbed58eab286d82/setuptools_scm_git_archive-1.0.tar.gz
Building wheels for collected packages: setuptools-scm-git-archive
  Building wheel for setuptools-scm-git-archive (setup.py) ... error
  Complete output from command /home/joe/envs/dev/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-wheel-c9k89q3b/setuptools-scm-git-archive/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-jqxaac2f:
  running bdist_wheel
  The [wheel] section is deprecated. Use [bdist_wheel] instead.
  running build
  running build_py
  creating build
  creating build/lib
  creating build/lib/setuptools_scm_git_archive
  copying setuptools_scm_git_archive/__init__.py -> build/lib/setuptools_scm_git_archive
  installing to build/bdist.linux-x86_64/wheel
  running install
  running install_lib
  creating build/bdist.linux-x86_64
  creating build/bdist.linux-x86_64/wheel
  creating build/bdist.linux-x86_64/wheel/setuptools_scm_git_archive
  copying build/lib/setuptools_scm_git_archive/__init__.py -> build/bdist.linux-x86_64/wheel/setuptools_scm_git_archive
  running install_egg_info
  running egg_info
  creating setuptools_scm_git_archive.egg-info
  writing setuptools_scm_git_archive.egg-info/PKG-INFO
  writing dependency_links to setuptools_scm_git_archive.egg-info/dependency_links.txt
  writing entry points to setuptools_scm_git_archive.egg-info/entry_points.txt
  writing top-level names to setuptools_scm_git_archive.egg-info/top_level.txt
  writing manifest file 'setuptools_scm_git_archive.egg-info/SOURCES.txt'
  reading manifest file 'setuptools_scm_git_archive.egg-info/SOURCES.txt'
  writing manifest file 'setuptools_scm_git_archive.egg-info/SOURCES.txt'
  Copying setuptools_scm_git_archive.egg-info to build/bdist.linux-x86_64/wheel/setuptools_scm_git_archive-0-py3.6.egg-info
  running install_scripts
  adding license file "LICENSE" (matched pattern "LICEN[CS]E*")
  creating build/bdist.linux-x86_64/wheel/setuptools_scm_git_archive-0.dist-info/WHEEL
  creating '/tmp/pip-wheel-jqxaac2f/setuptools_scm_git_archive-0-py2.py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
  adding 'setuptools_scm_git_archive/__init__.py'
  adding 'setuptools_scm_git_archive-0.dist-info/LICENSE'
  adding 'setuptools_scm_git_archive-0.dist-info/METADATA'
  adding 'setuptools_scm_git_archive-0.dist-info/WHEEL'
  adding 'setuptools_scm_git_archive-0.dist-info/entry_points.txt'
  adding 'setuptools_scm_git_archive-0.dist-info/top_level.txt'
  adding 'setuptools_scm_git_archive-0.dist-info/RECORD'
  removing build/bdist.linux-x86_64/wheel
  running bdist_wheel
  The [wheel] section is deprecated. Use [bdist_wheel] instead.
  running build
  running build_py
  installing to build/bdist.linux-x86_64/wheel
  running install
  running install_lib
  copying build/lib/setuptools_scm_git_archive/__init__.py -> build/bdist.linux-x86_64/wheel/setuptools_scm_git_archive
  error: could not create 'build/bdist.linux-x86_64/wheel/setuptools_scm_git_archive/__init__.py': No such file or directory
 

I assume the error gets caused because setuptools_scm_git_archive is using itself to setup the version right? So the wheel can only be created if you're working on a checkout not from a source distribution. If that's the case would adding the git metadata into the source distribution would be undesired?

The source distribution in my mind should be able to create different kind of binary distributions of itself... but I guess this package might be an exception to the rule.

Thoughts?

Local builds fail when setuptools_scm_git_archive enabled

Consider the project at https://github.com/yougov/pycrunch/tree/scm-versioning

It fails to build in travis:

https://travis-ci.org/Crunch-io/pycrunch/jobs/113766604

You would expect non-tagged commits like that branch to have some fallback mechanism to assign a version rather than to outright fail.

Is there a solution for this condition, or is it necessarily the case that use of setuptools_scm_git_archive requires that setup.py can only be invoked against tagged commits or tarballs?

setuptools_scm missing as a requirement

When installing setuptool_scm_git_archive, setuptools_scm not gets installed.

How to reproduce

python3 -m venv venv
venv/bin/pip install setuptools_scm_git_archive
venv/bin/python -c "import setuptools_scm_git_archive"
# → No module named 'setuptools_scm'

Expected behaviour

Even if setuptools_scm_git_archive is a plugin for setuptools_scm, I would expect it to require setuptools_scm - as it actually does require it.

Does not work with setuptools_scm v6.1.0 — AttributeError: 'NoneType' object has no attribute 'version_cls'

Hi,
Although I also reported this as pypa/setuptools_scm#615, I thought it would be worth mentioning here that setuptools_scm_git_archive doesn't work with setuptools_scm v6.1.0 (since pypa/setuptools_scm@fbadf5b to be exact).

The failure looks like this:

/usr/local/lib/python3.9/site-packages/setuptools_scm/version.py:212: UserWarning: meta invoked without explicit configuration, will use defaults where required.
  warnings.warn(
Traceback (most recent call last):
  File "/pikepdf-2.16.1/setup.py", line 38, in <module>
    __version__ = get_version()
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/__init__.py", line 170, in get_version
    return _get_version(config)
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/__init__.py", line 174, in _get_version
    parsed_version = _do_parse(config)
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/__init__.py", line 127, in _do_parse
    version = _version_from_entrypoints(config) or _version_from_entrypoints(
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/__init__.py", line 65, in _version_from_entrypoints
    version = _call_entrypoint_fn(root, config, ep.load())
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/__init__.py", line 54, in _call_entrypoint_fn
    return fn(root)
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm_git_archive/__init__.py", line 21, in parse
    return archival_to_version(data)
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm_git_archive/__init__.py", line 15, in archival_to_version
    return meta(versions[0])
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/version.py", line 216, in meta
    parsed_version = _parse_tag(tag, preformatted, config)
  File "/usr/local/lib/python3.9/site-packages/setuptools_scm/version.py", line 195, in _parse_tag
    version_cls = config.version_cls or VERSION_CLASS
AttributeError: 'NoneType' object has no attribute 'version_cls'

Reproducer Dockerfile:

FROM python:3.9
RUN wget -nv https://github.com/pikepdf/pikepdf/archive/v2.16.1.tar.gz
RUN tar xf v2.16.1.tar.gz
WORKDIR pikepdf-2.16.1

RUN pip3 install setuptools_scm_git_archive
# Bad 
RUN pip3 install git+https://github.com/pypa/setuptools_scm@fbadf5b060cdd7ec1fb3d29d885868b7b756497c

# The parent commit was still good
#RUN pip3 install git+https://github.com/pypa/setuptools_scm@b8451688b9cb295136c0154c7c59c25a9d88f844

RUN python setup.py --version

Make a new release?

The fix in #12 has been in for 2 years, and fortunately, setuptools-scm has not yet made it an error, but is saying it will in version 8 (currently at 6.4.2).

1.4: pytest fails with latest `setuptools-scm`

setuptools-scm 8.0.4 and pytest fails with

+ /usr/bin/pytest -ra -m 'not network' tests.py
============================= test session starts ==============================
platform linux -- Python 3.8.18, pytest-7.4.4, pluggy-1.3.0
rootdir: /home/tkloczko/rpmbuild/BUILD/setuptools_scm_git_archive-1.4
collected 0 items / 1 error

==================================== ERRORS ====================================
__________________________ ERROR collecting tests.py ___________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/setuptools_scm_git_archive-1.4/tests.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib64/python3.8/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests.py:2: in <module>
    from setuptools_scm import format_version
E   ImportError: cannot import name 'format_version' from 'setuptools_scm' (/usr/lib/python3.8/site-packages/setuptools_scm/__init__.py)
=========================== short test summary info ============================
ERROR tests.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.17s ===============================

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.