Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upload wheel fails with: "'pkginfo.distribution' has no attribute 'must_decode'" #107

Closed
ryeleo opened this issue Nov 29, 2022 · 21 comments
Closed

Comments

@ryeleo
Copy link

ryeleo commented Nov 29, 2022

I'm trying to upload my wheel and source package to PyPI. For some reason, when I try to upload the wheel file, I get an error: 'pkginfo.distribution' has no attribute 'must_decode'

  • If I omit building the bdist/wheel, then I don't run into this issue!
  • For more context, see setup.py, packaging output, and traceback of this issue below

setup.py

import codecs
import os
import sys
from typing import List

from setuptools import find_packages, setup

def installation_requirements() -> List[str]:
    install_requires = [
        'ConfigArgParse>=1',
        'humanize>=2',
        'pathvalidate>=2',
        'pytimeparse>=1',
        'PyYAML>=6',
        'rdap>=1',
        'requests>=2',
        'ruamel.yaml>=0.17',
        'tabulate>=0.8',
        'uologging>=0.7.3',
    ]
    if sys.version_info.minor < 7:  # Install dataclasses backport
        install_requires.append('dataclasses>=0.6')
        install_requires.append('netmiko>=3,<4.1',)  # Netmiko 4.1 drops py36 support
    else:
        install_requires.append('netmiko>=3',)

    return install_requires


setup(
    name='routeviews',
    version='0.2.0',
    description='CLI tools that support RouteViews.',
    long_description_content_type='text/markdown',
    long_description=long_description(),
    author='University of Oregon',
    author_email='rleonar7@uoregon.edu',
    license='MIT',
    url='https://github.com/routeviews/routeviews-cli',
    keywords=['RouteViews', 'CLI', 'peeringdb', 'API', 'Integration'],
    package_dir={'': 'src'},
    package_data={'': ['templates/*']},  # templates are part of our package!
    packages=find_packages('src'),
    entry_points={
        'console_scripts': [
            #
            # Automation tools (`routeviews` prefix)
            #
            'routeviews-template=routeviews.scripts.template:run_main',
            'routeviews-email-peers=routeviews.scripts.get_peers_email:run_main',
            'routeviews-lint=routeviews.scripts.format_ansible_inventory:run_main',
            'routeviews-build-peer=routeviews.scripts.ansible_peering_request:run_main',
            #
            # Monitoring tools (`rvm` prefix)
            #
            # ⚠ Important: These tools make NO changes.
            # Ideally, all these tools support "--influxdb" line protocol option.
            #
            'rvm-latest-mrt=routeviews.scripts.latest_mrt_dump:run_main',
            'rvm-bmp-status=routeviews.scripts.bmp_status:run_main',
            'rvm-bgp-status=routeviews.scripts.bgp_peering_status:run_main',
        ]
    },
    install_requires=installation_requirements(),
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'Topic :: System :: Networking :: Monitoring',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3.8',
        # 'Programming Language :: Python :: 3.7',
        # 'Programming Language :: Python :: 3.6',
    ]
)

Output from Packaging sdist + bdist

2022-11-29T19:45:08.0173375Z ##[group]Run python setup.py sdist 
2022-11-29T19:45:08.0173757Z �[36;1mpython setup.py sdist �[0m
2022-11-29T19:45:08.0174063Z �[36;1mpython setup.py bdist_wheel�[0m
2022-11-29T19:45:08.0240348Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2022-11-29T19:45:08.0240696Z ##[endgroup]
2022-11-29T19:45:08.5432425Z running sdist
2022-11-29T19:45:08.5434179Z running egg_info
2022-11-29T19:45:08.5623878Z creating src/routeviews.egg-info
2022-11-29T19:45:08.5626512Z writing src/routeviews.egg-info/PKG-INFO
2022-11-29T19:45:08.5631548Z writing dependency_links to src/routeviews.egg-info/dependency_links.txt
2022-11-29T19:45:08.5635791Z writing entry points to src/routeviews.egg-info/entry_points.txt
2022-11-29T19:45:08.5639121Z writing requirements to src/routeviews.egg-info/requires.txt
2022-11-29T19:45:08.5641983Z writing top-level names to src/routeviews.egg-info/top_level.txt
2022-11-29T19:45:08.5645570Z writing manifest file 'src/routeviews.egg-info/SOURCES.txt'
2022-11-29T19:45:08.5917877Z reading manifest file 'src/routeviews.egg-info/SOURCES.txt'
2022-11-29T19:45:08.5921197Z reading manifest template 'MANIFEST.in'
2022-11-29T19:45:08.5927063Z warning: no files found matching '*' under directory 'templates'
2022-11-29T19:45:08.5936947Z writing manifest file 'src/routeviews.egg-info/SOURCES.txt'
2022-11-29T19:45:08.5938019Z warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md
2022-11-29T19:45:08.5938310Z 
2022-11-29T19:45:08.5938533Z running check
2022-11-29T19:45:08.5949155Z creating routeviews-0.2.0
2022-11-29T19:45:08.5951269Z creating routeviews-0.2.0/docs
2022-11-29T19:45:08.5951903Z creating routeviews-0.2.0/src
2022-11-29T19:45:08.5952636Z creating routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.5955073Z creating routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.5955968Z creating routeviews-0.2.0/src/routeviews/ansible
2022-11-29T19:45:08.5956568Z creating routeviews-0.2.0/src/routeviews/ansible/data
2022-11-29T19:45:08.5957264Z creating routeviews-0.2.0/src/routeviews/frr
2022-11-29T19:45:08.5958336Z creating routeviews-0.2.0/src/routeviews/peeringdb
2022-11-29T19:45:08.5958873Z creating routeviews-0.2.0/src/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.5959328Z creating routeviews-0.2.0/src/routeviews/rdap
2022-11-29T19:45:08.5961167Z creating routeviews-0.2.0/src/routeviews/rdap/dataclasses
2022-11-29T19:45:08.5961886Z creating routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.5962465Z creating routeviews-0.2.0/src/routeviews/templates
2022-11-29T19:45:08.5963179Z copying files to routeviews-0.2.0...
2022-11-29T19:45:08.5966797Z copying MANIFEST.in -> routeviews-0.2.0
2022-11-29T19:45:08.5967306Z copying mkdocs.yml -> routeviews-0.2.0
2022-11-29T19:45:08.5970159Z copying setup.py -> routeviews-0.2.0
2022-11-29T19:45:08.5970722Z copying docs/README.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.5971522Z copying docs/add-tools.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.5972093Z copying docs/deploy.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.5972627Z copying docs/design.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.6027328Z copying docs/development.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.6027789Z copying docs/peeringdb.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.6028248Z copying docs/release-notes.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.6028696Z copying docs/user-guide.md -> routeviews-0.2.0/docs
2022-11-29T19:45:08.6029187Z copying src/routeviews/__init__.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6029684Z copying src/routeviews/api.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6030178Z copying src/routeviews/const.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6030685Z copying src/routeviews/defaults.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6031419Z copying src/routeviews/exceptions.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6032152Z copying src/routeviews/exec.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6032680Z copying src/routeviews/filesystem.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6033191Z copying src/routeviews/influx.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6033689Z copying src/routeviews/parse.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6034171Z copying src/routeviews/types.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6034667Z copying src/routeviews/yaml.py -> routeviews-0.2.0/src/routeviews
2022-11-29T19:45:08.6035238Z copying src/routeviews.egg-info/PKG-INFO -> routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.6035856Z copying src/routeviews.egg-info/SOURCES.txt -> routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.6036500Z copying src/routeviews.egg-info/dependency_links.txt -> routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.6037124Z copying src/routeviews.egg-info/entry_points.txt -> routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.6037748Z copying src/routeviews.egg-info/requires.txt -> routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.6038360Z copying src/routeviews.egg-info/top_level.txt -> routeviews-0.2.0/src/routeviews.egg-info
2022-11-29T19:45:08.6038945Z copying src/routeviews/ansible/__init__.py -> routeviews-0.2.0/src/routeviews/ansible
2022-11-29T19:45:08.6039506Z copying src/routeviews/ansible/inventory.py -> routeviews-0.2.0/src/routeviews/ansible
2022-11-29T19:45:08.6040084Z copying src/routeviews/ansible/parse.py -> routeviews-0.2.0/src/routeviews/ansible
2022-11-29T19:45:08.6040680Z copying src/routeviews/ansible/data/__init__.py -> routeviews-0.2.0/src/routeviews/ansible/data
2022-11-29T19:45:08.6044054Z copying src/routeviews/ansible/data/collector.py -> routeviews-0.2.0/src/routeviews/ansible/data
2022-11-29T19:45:08.6044675Z copying src/routeviews/ansible/data/neighbor.py -> routeviews-0.2.0/src/routeviews/ansible/data
2022-11-29T19:45:08.6045374Z copying src/routeviews/frr/__init__.py -> routeviews-0.2.0/src/routeviews/frr
2022-11-29T19:45:08.6045909Z copying src/routeviews/frr/bgp.py -> routeviews-0.2.0/src/routeviews/frr
2022-11-29T19:45:08.6046436Z copying src/routeviews/frr/bmp.py -> routeviews-0.2.0/src/routeviews/frr
2022-11-29T19:45:08.6047008Z copying src/routeviews/peeringdb/__init__.py -> routeviews-0.2.0/src/routeviews/peeringdb
2022-11-29T19:45:08.6047601Z copying src/routeviews/peeringdb/auth.py -> routeviews-0.2.0/src/routeviews/peeringdb
2022-11-29T19:45:08.6048171Z copying src/routeviews/peeringdb/get.py -> routeviews-0.2.0/src/routeviews/peeringdb
2022-11-29T19:45:08.6048757Z copying src/routeviews/peeringdb/parse.py -> routeviews-0.2.0/src/routeviews/peeringdb
2022-11-29T19:45:08.6049355Z copying src/routeviews/peeringdb/repository.py -> routeviews-0.2.0/src/routeviews/peeringdb
2022-11-29T19:45:08.6050028Z copying src/routeviews/peeringdb/dataclasses/__init__.py -> routeviews-0.2.0/src/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.6050766Z copying src/routeviews/peeringdb/dataclasses/contact.py -> routeviews-0.2.0/src/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.6051460Z copying src/routeviews/peeringdb/dataclasses/network.py -> routeviews-0.2.0/src/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.6052166Z copying src/routeviews/peeringdb/dataclasses/peer_request.py -> routeviews-0.2.0/src/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.6052869Z copying src/routeviews/peeringdb/dataclasses/router.py -> routeviews-0.2.0/src/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.6053472Z copying src/routeviews/rdap/__init__.py -> routeviews-0.2.0/src/routeviews/rdap
2022-11-29T19:45:08.6054020Z copying src/routeviews/rdap/repository.py -> routeviews-0.2.0/src/routeviews/rdap
2022-11-29T19:45:08.6054647Z copying src/routeviews/rdap/dataclasses/__init__.py -> routeviews-0.2.0/src/routeviews/rdap/dataclasses
2022-11-29T19:45:08.6055300Z copying src/routeviews/rdap/dataclasses/network.py -> routeviews-0.2.0/src/routeviews/rdap/dataclasses
2022-11-29T19:45:08.6055989Z copying src/routeviews/scripts/__init__.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6056616Z copying src/routeviews/scripts/ansible_peering_request.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6057225Z copying src/routeviews/scripts/bgp_peering_status.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6057819Z copying src/routeviews/scripts/bmp_status.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6058434Z copying src/routeviews/scripts/format_ansible_inventory.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6059053Z copying src/routeviews/scripts/get_peers_email.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6059642Z copying src/routeviews/scripts/latest_mrt_dump.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6060227Z copying src/routeviews/scripts/template.py -> routeviews-0.2.0/src/routeviews/scripts
2022-11-29T19:45:08.6061237Z copying src/routeviews/templates/bgp_summary.textfsm -> routeviews-0.2.0/src/routeviews/templates
2022-11-29T19:45:08.6061871Z copying src/routeviews/templates/bmp_summary.textfsm -> routeviews-0.2.0/src/routeviews/templates
2022-11-29T19:45:08.6062333Z Writing routeviews-0.2.0/setup.cfg
2022-11-29T19:45:08.6062591Z creating dist
2022-11-29T19:45:08.6062852Z Creating tar archive
2022-11-29T19:45:08.6369850Z removing 'routeviews-0.2.0' (and everything under it)
2022-11-29T19:45:08.8799074Z running bdist_wheel
2022-11-29T19:45:08.9053114Z running build
2022-11-29T19:45:08.9053899Z running build_py
2022-11-29T19:45:08.9079479Z creating build
2022-11-29T19:45:08.9079739Z creating build/lib
2022-11-29T19:45:08.9080018Z creating build/lib/routeviews
2022-11-29T19:45:08.9080638Z copying src/routeviews/yaml.py -> build/lib/routeviews
2022-11-29T19:45:08.9081079Z copying src/routeviews/api.py -> build/lib/routeviews
2022-11-29T19:45:08.9081946Z copying src/routeviews/filesystem.py -> build/lib/routeviews
2022-11-29T19:45:08.9082414Z copying src/routeviews/__init__.py -> build/lib/routeviews
2022-11-29T19:45:08.9082888Z copying src/routeviews/exceptions.py -> build/lib/routeviews
2022-11-29T19:45:08.9083335Z copying src/routeviews/influx.py -> build/lib/routeviews
2022-11-29T19:45:08.9083784Z copying src/routeviews/types.py -> build/lib/routeviews
2022-11-29T19:45:08.9084228Z copying src/routeviews/exec.py -> build/lib/routeviews
2022-11-29T19:45:08.9084680Z copying src/routeviews/defaults.py -> build/lib/routeviews
2022-11-29T19:45:08.9085125Z copying src/routeviews/const.py -> build/lib/routeviews
2022-11-29T19:45:08.9085555Z copying src/routeviews/parse.py -> build/lib/routeviews
2022-11-29T19:45:08.9085903Z creating build/lib/routeviews/peeringdb
2022-11-29T19:45:08.9086402Z copying src/routeviews/peeringdb/__init__.py -> build/lib/routeviews/peeringdb
2022-11-29T19:45:08.9088727Z copying src/routeviews/peeringdb/get.py -> build/lib/routeviews/peeringdb
2022-11-29T19:45:08.9090920Z copying src/routeviews/peeringdb/repository.py -> build/lib/routeviews/peeringdb
2022-11-29T19:45:08.9092969Z copying src/routeviews/peeringdb/auth.py -> build/lib/routeviews/peeringdb
2022-11-29T19:45:08.9095091Z copying src/routeviews/peeringdb/parse.py -> build/lib/routeviews/peeringdb
2022-11-29T19:45:08.9098343Z creating build/lib/routeviews/rdap
2022-11-29T19:45:08.9099907Z copying src/routeviews/rdap/__init__.py -> build/lib/routeviews/rdap
2022-11-29T19:45:08.9103086Z copying src/routeviews/rdap/repository.py -> build/lib/routeviews/rdap
2022-11-29T19:45:08.9106377Z creating build/lib/routeviews/frr
2022-11-29T19:45:08.9107894Z copying src/routeviews/frr/__init__.py -> build/lib/routeviews/frr
2022-11-29T19:45:08.9110666Z copying src/routeviews/frr/bmp.py -> build/lib/routeviews/frr
2022-11-29T19:45:08.9112817Z copying src/routeviews/frr/bgp.py -> build/lib/routeviews/frr
2022-11-29T19:45:08.9116919Z creating build/lib/routeviews/scripts
2022-11-29T19:45:08.9118879Z copying src/routeviews/scripts/get_peers_email.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9121483Z copying src/routeviews/scripts/template.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9123087Z copying src/routeviews/scripts/__init__.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9125785Z copying src/routeviews/scripts/bmp_status.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9127920Z copying src/routeviews/scripts/ansible_peering_request.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9130004Z copying src/routeviews/scripts/bgp_peering_status.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9132088Z copying src/routeviews/scripts/latest_mrt_dump.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9134320Z copying src/routeviews/scripts/format_ansible_inventory.py -> build/lib/routeviews/scripts
2022-11-29T19:45:08.9137627Z creating build/lib/routeviews/ansible
2022-11-29T19:45:08.9139210Z copying src/routeviews/ansible/__init__.py -> build/lib/routeviews/ansible
2022-11-29T19:45:08.9142506Z copying src/routeviews/ansible/inventory.py -> build/lib/routeviews/ansible
2022-11-29T19:45:08.9144643Z copying src/routeviews/ansible/parse.py -> build/lib/routeviews/ansible
2022-11-29T19:45:08.9148496Z creating build/lib/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9150139Z copying src/routeviews/peeringdb/dataclasses/network.py -> build/lib/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9153461Z copying src/routeviews/peeringdb/dataclasses/__init__.py -> build/lib/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9155171Z copying src/routeviews/peeringdb/dataclasses/contact.py -> build/lib/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9158009Z copying src/routeviews/peeringdb/dataclasses/router.py -> build/lib/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9160260Z copying src/routeviews/peeringdb/dataclasses/peer_request.py -> build/lib/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9163328Z creating build/lib/routeviews/rdap/dataclasses
2022-11-29T19:45:08.9164753Z copying src/routeviews/rdap/dataclasses/network.py -> build/lib/routeviews/rdap/dataclasses
2022-11-29T19:45:08.9167615Z copying src/routeviews/rdap/dataclasses/__init__.py -> build/lib/routeviews/rdap/dataclasses
2022-11-29T19:45:08.9170747Z creating build/lib/routeviews/ansible/data
2022-11-29T19:45:08.9172833Z copying src/routeviews/ansible/data/neighbor.py -> build/lib/routeviews/ansible/data
2022-11-29T19:45:08.9175086Z copying src/routeviews/ansible/data/__init__.py -> build/lib/routeviews/ansible/data
2022-11-29T19:45:08.9176740Z copying src/routeviews/ansible/data/collector.py -> build/lib/routeviews/ansible/data
2022-11-29T19:45:08.9184530Z creating build/lib/routeviews/templates
2022-11-29T19:45:08.9186221Z copying src/routeviews/templates/bmp_summary.textfsm -> build/lib/routeviews/templates
2022-11-29T19:45:08.9189404Z copying src/routeviews/templates/bgp_summary.textfsm -> build/lib/routeviews/templates
2022-11-29T19:45:08.9332806Z /usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
2022-11-29T19:45:08.9333400Z   warnings.warn(
2022-11-29T19:45:08.9394625Z installing to build/bdist.linux-x86_64/wheel
2022-11-29T19:45:08.9394941Z running install
2022-11-29T19:45:08.9400508Z running install_lib
2022-11-29T19:45:08.9466601Z creating build/bdist.linux-x86_64
2022-11-29T19:45:08.9467422Z creating build/bdist.linux-x86_64/wheel
2022-11-29T19:45:08.9468112Z creating build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9470528Z copying build/lib/routeviews/yaml.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9471283Z creating build/bdist.linux-x86_64/wheel/routeviews/peeringdb
2022-11-29T19:45:08.9472065Z copying build/lib/routeviews/peeringdb/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb
2022-11-29T19:45:08.9472807Z creating build/bdist.linux-x86_64/wheel/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9473771Z copying build/lib/routeviews/peeringdb/dataclasses/network.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9475879Z copying build/lib/routeviews/peeringdb/dataclasses/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9476813Z copying build/lib/routeviews/peeringdb/dataclasses/contact.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9477828Z copying build/lib/routeviews/peeringdb/dataclasses/router.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9480292Z copying build/lib/routeviews/peeringdb/dataclasses/peer_request.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb/dataclasses
2022-11-29T19:45:08.9481380Z copying build/lib/routeviews/peeringdb/get.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb
2022-11-29T19:45:08.9482303Z copying build/lib/routeviews/peeringdb/repository.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb
2022-11-29T19:45:08.9483202Z copying build/lib/routeviews/peeringdb/auth.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb
2022-11-29T19:45:08.9484012Z copying build/lib/routeviews/peeringdb/parse.py -> build/bdist.linux-x86_64/wheel/routeviews/peeringdb
2022-11-29T19:45:08.9484787Z copying build/lib/routeviews/api.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9485553Z copying build/lib/routeviews/filesystem.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9486264Z copying build/lib/routeviews/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9545147Z copying build/lib/routeviews/exceptions.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9545738Z copying build/lib/routeviews/influx.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9546306Z copying build/lib/routeviews/types.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9547067Z copying build/lib/routeviews/exec.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9547565Z creating build/bdist.linux-x86_64/wheel/routeviews/rdap
2022-11-29T19:45:08.9548135Z copying build/lib/routeviews/rdap/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/rdap
2022-11-29T19:45:08.9548669Z creating build/bdist.linux-x86_64/wheel/routeviews/rdap/dataclasses
2022-11-29T19:45:08.9549314Z copying build/lib/routeviews/rdap/dataclasses/network.py -> build/bdist.linux-x86_64/wheel/routeviews/rdap/dataclasses
2022-11-29T19:45:08.9550022Z copying build/lib/routeviews/rdap/dataclasses/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/rdap/dataclasses
2022-11-29T19:45:08.9550679Z copying build/lib/routeviews/rdap/repository.py -> build/bdist.linux-x86_64/wheel/routeviews/rdap
2022-11-29T19:45:08.9551176Z creating build/bdist.linux-x86_64/wheel/routeviews/frr
2022-11-29T19:45:08.9551715Z copying build/lib/routeviews/frr/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/frr
2022-11-29T19:45:08.9552306Z copying build/lib/routeviews/frr/bmp.py -> build/bdist.linux-x86_64/wheel/routeviews/frr
2022-11-29T19:45:08.9552897Z copying build/lib/routeviews/frr/bgp.py -> build/bdist.linux-x86_64/wheel/routeviews/frr
2022-11-29T19:45:08.9553475Z copying build/lib/routeviews/defaults.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9554030Z copying build/lib/routeviews/const.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9554535Z creating build/bdist.linux-x86_64/wheel/routeviews/templates
2022-11-29T19:45:08.9555145Z copying build/lib/routeviews/templates/bmp_summary.textfsm -> build/bdist.linux-x86_64/wheel/routeviews/templates
2022-11-29T19:45:08.9555835Z copying build/lib/routeviews/templates/bgp_summary.textfsm -> build/bdist.linux-x86_64/wheel/routeviews/templates
2022-11-29T19:45:08.9556369Z creating build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9556964Z copying build/lib/routeviews/scripts/get_peers_email.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9557620Z copying build/lib/routeviews/scripts/template.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9558337Z copying build/lib/routeviews/scripts/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9558980Z copying build/lib/routeviews/scripts/bmp_status.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9559641Z copying build/lib/routeviews/scripts/ansible_peering_request.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9560326Z copying build/lib/routeviews/scripts/bgp_peering_status.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9560998Z copying build/lib/routeviews/scripts/latest_mrt_dump.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9561688Z copying build/lib/routeviews/scripts/format_ansible_inventory.py -> build/bdist.linux-x86_64/wheel/routeviews/scripts
2022-11-29T19:45:08.9562243Z creating build/bdist.linux-x86_64/wheel/routeviews/ansible
2022-11-29T19:45:08.9562799Z copying build/lib/routeviews/ansible/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/ansible
2022-11-29T19:45:08.9563330Z creating build/bdist.linux-x86_64/wheel/routeviews/ansible/data
2022-11-29T19:45:08.9563942Z copying build/lib/routeviews/ansible/data/neighbor.py -> build/bdist.linux-x86_64/wheel/routeviews/ansible/data
2022-11-29T19:45:08.9564790Z copying build/lib/routeviews/ansible/data/__init__.py -> build/bdist.linux-x86_64/wheel/routeviews/ansible/data
2022-11-29T19:45:08.9565468Z copying build/lib/routeviews/ansible/data/collector.py -> build/bdist.linux-x86_64/wheel/routeviews/ansible/data
2022-11-29T19:45:08.9566109Z copying build/lib/routeviews/ansible/inventory.py -> build/bdist.linux-x86_64/wheel/routeviews/ansible
2022-11-29T19:45:08.9566737Z copying build/lib/routeviews/ansible/parse.py -> build/bdist.linux-x86_64/wheel/routeviews/ansible
2022-11-29T19:45:08.9567326Z copying build/lib/routeviews/parse.py -> build/bdist.linux-x86_64/wheel/routeviews
2022-11-29T19:45:08.9567775Z running install_egg_info
2022-11-29T19:45:08.9621985Z running egg_info
2022-11-29T19:45:08.9623996Z writing src/routeviews.egg-info/PKG-INFO
2022-11-29T19:45:08.9629695Z writing dependency_links to src/routeviews.egg-info/dependency_links.txt
2022-11-29T19:45:08.9634264Z writing entry points to src/routeviews.egg-info/entry_points.txt
2022-11-29T19:45:08.9638690Z writing requirements to src/routeviews.egg-info/requires.txt
2022-11-29T19:45:08.9641107Z writing top-level names to src/routeviews.egg-info/top_level.txt
2022-11-29T19:45:08.9665757Z reading manifest file 'src/routeviews.egg-info/SOURCES.txt'
2022-11-29T19:45:08.9671834Z reading manifest template 'MANIFEST.in'
2022-11-29T19:45:08.9677495Z warning: no files found matching '*' under directory 'templates'
2022-11-29T19:45:08.9692934Z writing manifest file 'src/routeviews.egg-info/SOURCES.txt'
2022-11-29T19:45:08.9695444Z Copying src/routeviews.egg-info to build/bdist.linux-x86_64/wheel/routeviews-0.2.0.egg-info
2022-11-29T19:45:08.9705754Z running install_scripts
2022-11-29T19:45:09.0171994Z creating build/bdist.linux-x86_64/wheel/routeviews-0.2.0.dist-info/WHEEL
2022-11-29T19:45:09.0176685Z creating 'dist/routeviews-0.2.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
2022-11-29T19:45:09.0182759Z adding 'routeviews/__init__.py'
2022-11-29T19:45:09.0187190Z adding 'routeviews/api.py'
2022-11-29T19:45:09.0191184Z adding 'routeviews/const.py'
2022-11-29T19:45:09.0196274Z adding 'routeviews/defaults.py'
2022-11-29T19:45:09.0198042Z adding 'routeviews/exceptions.py'
2022-11-29T19:45:09.0203688Z adding 'routeviews/exec.py'
2022-11-29T19:45:09.0207742Z adding 'routeviews/filesystem.py'
2022-11-29T19:45:09.0211493Z adding 'routeviews/influx.py'
2022-11-29T19:45:09.0215541Z adding 'routeviews/parse.py'
2022-11-29T19:45:09.0217502Z adding 'routeviews/types.py'
2022-11-29T19:45:09.0223277Z adding 'routeviews/yaml.py'
2022-11-29T19:45:09.0226988Z adding 'routeviews/ansible/__init__.py'
2022-11-29T19:45:09.0230907Z adding 'routeviews/ansible/inventory.py'
2022-11-29T19:45:09.0235424Z adding 'routeviews/ansible/parse.py'
2022-11-29T19:45:09.0238871Z adding 'routeviews/ansible/data/__init__.py'
2022-11-29T19:45:09.0243438Z adding 'routeviews/ansible/data/collector.py'
2022-11-29T19:45:09.0246980Z adding 'routeviews/ansible/data/neighbor.py'
2022-11-29T19:45:09.0250111Z adding 'routeviews/frr/__init__.py'
2022-11-29T19:45:09.0254465Z adding 'routeviews/frr/bgp.py'
2022-11-29T19:45:09.0257838Z adding 'routeviews/frr/bmp.py'
2022-11-29T19:45:09.0261537Z adding 'routeviews/peeringdb/__init__.py'
2022-11-29T19:45:09.0264039Z adding 'routeviews/peeringdb/auth.py'
2022-11-29T19:45:09.0268336Z adding 'routeviews/peeringdb/get.py'
2022-11-29T19:45:09.0271404Z adding 'routeviews/peeringdb/parse.py'
2022-11-29T19:45:09.0275200Z adding 'routeviews/peeringdb/repository.py'
2022-11-29T19:45:09.0277815Z adding 'routeviews/peeringdb/dataclasses/__init__.py'
2022-11-29T19:45:09.0282470Z adding 'routeviews/peeringdb/dataclasses/contact.py'
2022-11-29T19:45:09.0288029Z adding 'routeviews/peeringdb/dataclasses/network.py'
2022-11-29T19:45:09.0291721Z adding 'routeviews/peeringdb/dataclasses/peer_request.py'
2022-11-29T19:45:09.0295331Z adding 'routeviews/peeringdb/dataclasses/router.py'
2022-11-29T19:45:09.0299516Z adding 'routeviews/rdap/__init__.py'
2022-11-29T19:45:09.0301356Z adding 'routeviews/rdap/repository.py'
2022-11-29T19:45:09.0305293Z adding 'routeviews/rdap/dataclasses/__init__.py'
2022-11-29T19:45:09.0307248Z adding 'routeviews/rdap/dataclasses/network.py'
2022-11-29T19:45:09.0310113Z adding 'routeviews/scripts/__init__.py'
2022-11-29T19:45:09.0312983Z adding 'routeviews/scripts/ansible_peering_request.py'
2022-11-29T19:45:09.0316010Z adding 'routeviews/scripts/bgp_peering_status.py'
2022-11-29T19:45:09.0318730Z adding 'routeviews/scripts/bmp_status.py'
2022-11-29T19:45:09.0322108Z adding 'routeviews/scripts/format_ansible_inventory.py'
2022-11-29T19:45:09.0325643Z adding 'routeviews/scripts/get_peers_email.py'
2022-11-29T19:45:09.0330081Z adding 'routeviews/scripts/latest_mrt_dump.py'
2022-11-29T19:45:09.0332719Z adding 'routeviews/scripts/template.py'
2022-11-29T19:45:09.0336107Z adding 'routeviews/templates/bgp_summary.textfsm'
2022-11-29T19:45:09.0337600Z adding 'routeviews/templates/bmp_summary.textfsm'
2022-11-29T19:45:09.0347510Z adding 'routeviews-0.2.0.dist-info/METADATA'
2022-11-29T19:45:09.0348941Z adding 'routeviews-0.2.0.dist-info/WHEEL'
2022-11-29T19:45:09.0351018Z adding 'routeviews-0.2.0.dist-info/entry_points.txt'
2022-11-29T19:45:09.0352763Z adding 'routeviews-0.2.0.dist-info/top_level.txt'
2022-11-29T19:45:09.0357923Z adding 'routeviews-0.2.0.dist-info/RECORD'
2022-11-29T19:45:09.0359609Z removing build/bdist.linux-x86_64/wheel

Traceback

2022-11-29T19:45:10.1687482Z Traceback (most recent call last):
2022-11-29T19:45:10.1688464Z   File "/usr/local/bin/twine", line 8, in <module>
2022-11-29T19:45:10.1689141Z     sys.exit(main())
2022-11-29T19:45:10.1690409Z   File "/usr/local/lib/python3.7/site-packages/twine/__main__.py", line 33, in main
2022-11-29T19:45:10.1691253Z     error = cli.dispatch(sys.argv[1:])
2022-11-29T19:45:10.1692298Z   File "/usr/local/lib/python3.7/site-packages/twine/cli.py", line 123, in dispatch
2022-11-29T19:45:10.1693058Z     return main(args.args)
2022-11-29T19:45:10.1694082Z   File "/usr/local/lib/python3.7/site-packages/twine/commands/check.py", line 183, in main
2022-11-29T19:45:10.1695008Z     return check(parsed_args.dists, strict=parsed_args.strict)
2022-11-29T19:45:10.1696128Z   File "/usr/local/lib/python3.7/site-packages/twine/commands/check.py", line 129, in check
2022-11-29T19:45:10.1697039Z     warnings, is_ok = _check_file(filename, render_warning_stream)
2022-11-29T19:45:10.1698154Z   File "/usr/local/lib/python3.7/site-packages/twine/commands/check.py", line 73, in _check_file
2022-11-29T19:45:10.1699159Z     package = package_file.PackageFile.from_filename(filename, comment=None)
2022-11-29T19:45:10.1700347Z   File "/usr/local/lib/python3.7/site-packages/twine/package.py", line 96, in from_filename
2022-11-29T19:45:10.1703080Z     meta = DIST_TYPES[dtype](filename)
2022-11-29T19:45:10.1703977Z   File "/usr/local/lib/python3.7/site-packages/twine/wheel.py", line 42, in __init__
2022-11-29T19:45:10.1704609Z     self.extractMetadata()
2022-11-29T19:45:10.1705553Z   File "/usr/local/lib/python3.7/site-packages/pkginfo/distribution.py", line 121, in extractMetadata
2022-11-29T19:45:10.1706225Z     self.parse(data)
2022-11-29T19:45:10.1707031Z   File "/usr/local/lib/python3.7/site-packages/twine/wheel.py", line 89, in parse
2022-11-29T19:45:10.1707726Z     fp = io.StringIO(distribution.must_decode(data))
2022-11-29T19:45:10.1708632Z AttributeError: module 'pkginfo.distribution' has no attribute 'must_decode'
@di
Copy link
Sponsor Member

di commented Nov 29, 2022

This is due to pypa/twine#940, and should be temporarily resolved by the hotfix release of https://pypi.org/project/pkginfo/1.9.1/, and eventually by pypa/twine#941.

@webknjaz
Copy link
Member

🤦🏼 I should really invest in #101

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

hi @di and @webknjaz , I am facing the same issue as above. Is there anything I can do to mitigate this for now? is there an ETA for the fix to be public?

@webknjaz
Copy link
Member

I think I can attempt pinning the deps now, partially resolving #101.

@webknjaz
Copy link
Member

@ryeleo one suspicious thing in your traceback is the use of Python 3.7. Our action currently uses Python 3.9, so you must be using Twine directly, meaning this issue tracker is not the right one, and you need to take it up with Twine.

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

@webknjaz should I change anything with my workflow:

      - uses: actions/checkout@v3
      - name: Set up Python 3.9
        uses: actions/setup-python@v4
        with:
          python-version: 3.9
      - name: Install pypa/build
        run: >-
          python -m
          pip install
          build
          --user
      - name: Build a binary wheel and a source tarball
        run: >-
          python -m
          build
          --sdist
          --wheel
          --outdir dist/
          .
      - name: Publish distribution to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          password: ${{ secrets.PYPI_API_TOKEN }}

@webknjaz
Copy link
Member

webknjaz commented Nov 30, 2022

@ryeleo not really, except maybe delete --sdist --wheel — they are implied by default, but newer versions of build also build a wheel out of the sdist and not from the Git checkout if you don't specify any args. Just saying that the traceback does not seem to be coming from the container. Do you have a public workflow run, so I could check the log?

This should be enough as of today:

-          python -m
-          build
-          --sdist
-          --wheel
-          --outdir dist/
-          .
+          python -m build

(but, of course, this won't fix the traceback in twine)

@webknjaz
Copy link
Member

@ryeleo one more thing you could add to the job definition is

environment:
  name: pypi
  url: https://pypi.org/p/${{ your_package_name }}

and store the secret just under that env, not globally. This will also let you require approvals for running the job.
I'll need to update the tutorial, adding this at some point...

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

Do you have a public workflow run, so I could check the log?

I think this is public:
https://github.com/IBM/secrets-manager-python-sdk/actions/runs/3577351004/jobs/6016245638

webknjaz added a commit that referenced this issue Nov 30, 2022
This patch adds constraint files with the dependency tree
generated by `pip-compile` under Python 3.9. They are now integrated
into the action container image.

Refs:
* #101
* #107
webknjaz added a commit that referenced this issue Nov 30, 2022
@webknjaz
Copy link
Member

@ryeleo @ydekel6 I've made a few commits to the unstable branch. Could you try using pypa/gh-action-pypi-publish@unstable/v1 and report back? If it works well, I'll release it under the stable versions.

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

sure, one moment

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

@webknjaz it fails in the dockerfile step:
image

@webknjaz
Copy link
Member

Ah, sorry about that. I'll check building it locally next time.

@webknjaz
Copy link
Member

@ydekel6 please, make another attempt. I've made sure that it builds locally.

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

@webknjaz did you by chance remove twine? we passed the error we're talking but failed on a new one
image

@webknjaz
Copy link
Member

That's weird. I changed the installation target to --user after seeing some dir access errors with pip install. Maybe there's something wrong with PYTHONPATH. I'll check.

@webknjaz
Copy link
Member

webknjaz commented Nov 30, 2022

Running in interactive mode (i.e. podman --rm -it --entrypoint=/bin/bash ...) works. I wonder if direct execution fails for some reason.

@webknjaz
Copy link
Member

This doesn't traceback locally 🤔

$ podman run --rm -it -v "$(pwd):/app" -e INPUT_REPOSITORY_URL= -e INPUT_PASSWORD= -e INPUT_PRINT_HASH= -e INPUT_VERBOSE= -e INPUT_SKIP_EXISTING= -e INPUT_USER= -e INPUT_PACKAGES_DIR=dist/ -e INPUT_VERIFY_METADATA= localhost/gh-action-pypi-publish:latest 
ERRO[0000] User-selected graph driver "vfs" overwritten by graph driver "overlay" from database - delete libpod local files to resolve 
Checking dist/six-1.16.0-py2.py3-none-any.whl: PASSED with warnings
WARNING  `long_description_content_type` missing. defaulting to `text/x-rst`.                                                                 
Showing hash values of files to be uploaded:
/app/dist/six-1.16.0-py2.py3-none-any.whl

SHA256: 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
MD5: 529d7fd7e14612ccde86417b4402d6f3
BLAKE2-256: d95ae7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11

Uploading distributions to https://upload.pypi.org/legacy/
INFO     dist/six-1.16.0-py2.py3-none-any.whl (10.8 KB)                                                                                       
INFO     username set by command options                                                                                                      
INFO     password set by command options                                                                                                      
INFO     username: <empty>                                                                                                                    
INFO     password: <empty>                                                                                                                    
WARNING  Skipping six-1.16.0-py2.py3-none-any.whl because it appears to already exist

@webknjaz
Copy link
Member

@ydekel6 I've gone ahead and just set $PYTHONPATH. It should work now, but at some point, I'll probably want to make a managed virtualenv instead of this fragile solution...
Try again?

@ydekel6
Copy link

ydekel6 commented Nov 30, 2022

Thanks @webknjaz it worked now :)

@webknjaz
Copy link
Member

Alright, I've cut v1.5.2. You can now revert to using @release/v1, or specific tags, or full commit SHAs (the last one is favored for the hardened environments and dependabot knows how to bump these too).

#108

andrewpollock pushed a commit to google/osv.dev that referenced this issue Dec 5, 2022
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[pypa/gh-action-pypi-publish](https://togithub.com/pypa/gh-action-pypi-publish)
| action | minor | `v1.5.1` -> `v1.6.1` |

---

### Release Notes

<details>
<summary>pypa/gh-action-pypi-publish</summary>

###
[`v1.6.1`](https://togithub.com/pypa/gh-action-pypi-publish/releases/tag/v1.6.1)

[Compare
Source](https://togithub.com/pypa/gh-action-pypi-publish/compare/v1.6.0...v1.6.1)

#### What's happened?!

There was a sneaky bug in v1.6.0 which caused Twine to be outside the
import path in the Python runtime. It is fixed in v1.6.1 by updating
`$PYTHONPATH` to point to a correct location of the user-global
`site-packages/` directory.

**Full Diff**:
pypa/gh-action-pypi-publish@v1.6.0...v1.6.1

###
[`v1.6.0`](https://togithub.com/pypa/gh-action-pypi-publish/releases/tag/v1.6.0)

[Compare
Source](https://togithub.com/pypa/gh-action-pypi-publish/compare/v1.5.2...v1.6.0)

#### Anything's changed?

The only update is that the Python runtime has been upgraded from 3.9 to
3.11. There are no functional changes in this release.

**Full Changelog**:
pypa/gh-action-pypi-publish@v1.5.2...v1.6.0

###
[`v1.5.2`](https://togithub.com/pypa/gh-action-pypi-publish/releases/tag/v1.5.2)

[Compare
Source](https://togithub.com/pypa/gh-action-pypi-publish/compare/v1.5.1...v1.5.2)

#### What's Improved

- Implemented the Twine transitive dependency tree pinning using
pip-tools-generated constraint files. See
[pypa/gh-action-pypi-publish#107
and
[pypa/gh-action-pypi-publish#101
for details.

**Full Diff**:
pypa/gh-action-pypi-publish@v1.5.1...v1.5.2

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 6am on monday" in timezone
Australia/Sydney, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/google/osv.dev).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC40OC4xIiwidXBkYXRlZEluVmVyIjoiMzQuNDguMSJ9-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants