Skip to main content

arty-mc

CI codecov Codacy Badge Python License Platform Platform Status

         o                      o                            o          o             
        <|>                    <|>                          <|\        /|>            
        / \                    < >                          / \\o    o// \            
      o/   \o       \o__ __o    |       o      o            \o/ v\  /v \o/      __o__ 
     <|__ __|>       |     |>   o__/_  <|>    <|>  _\__o__   |   <\/>   |      />  \  
     /       \      / \   < >   |      < >    < >       \   / \        / \   o/       
   o/         \o    \o/         |       \o    o/            \o/        \o/  <|        
  /v           v\    |          o        v\  /v              |          |    \\       
 />             <\  / \         <\__      <\/>              / \        / \    _\o__</ 
                                           /                                          
                                          o                                           
                                       __/>                                           

arty-mc is a Python package providing a terminal file manager for JFrog Artifactory.

It provides a dual-pane interface similar to Midnight Commander, allowing you to browse, filter, copy and delete files and folders between the local filesystem and Artifactory repositories directly from the terminal.

It uses Textual for the terminal interface and dohq-artifactory for interacting with Artifactory repositories.


Why arty-mc?

Managing artifacts in Artifactory is often done through the web UI, generic tools like curl or the jf-cli. For developers who prefer working directly in the terminal, this can be inconvenient.


Features

  • Dual-pane terminal interface
  • Browse/Filer local filesystem and Artifactory repositories
  • Copy files between panes
  • Delete artifacts
  • Simple YAML configuration

Screenshot

arty-mc_screenshot


Requirements

  • Python 3.9+
  • Access to an Artifactory server
  • Artifactory API token

Installation

pip install arty-mc

Create Configuration File

Create a configuration file in your home directory:

~/.arty-mc.yml

Example configuration:

server: https://artifactory.company.com/artifactory
user: myuser
token: ********************************************

Configuration Fields

Field Description
server Base URL of the Artifactory server
user Artifactory username
token Artifactory API token

Running arty-mc

Run the tool directly:

python -m arty_mc <repository>

Example:

python -m arty_mc libs-release-local

This starts the dual-pane interface where you can browse your local filesystem and the selected repository.

Important Notes

⚠️ Warning: Deleting artifacts from repositories is irreversible and can't be canceled.

  • Empty Directories on your local filesystem are highlighted in yellow.
    ❌ These cannot be copied to Artifactory as they are not supported.

  • Dead Symlinks on your local filesystem are highlighted in red.
    ❌ These cannot be copied to Artifactory.

  • Unreadable Files on your local filesystem are highlighted in grey.
    ❌ These cannot be copied to Artifactory either.

💡 Tip:
To ensure a folder is created in Artifactory, add a placeholder file inside it, for example:

.keep

⚠️ File counts and folder sizes may differ between the local and remote repository because Artifactory performs deduplication, counting identical files only once.


Typical Workflow

  1. Start arty-mc with a repository
  2. Navigate the local filesystem in one pane
  3. Browse the Artifactory repository in the other pane
  4. Copy files between panes
  5. Delete artifacts if needed

Keyboard Shortcuts

Key Action
↑ ↓ Navigate
Enter Open Directory
Tab Switch Pane
F2 Cancel Copy Operation
F5 Copy
F8 Delete
F10 Quit

Building an Executable with Pyinstaller

You can build a binary using PyInstaller.

Install PyInstaller:

pip install pyinstaller

Build the binary:

-—onefile: slower startup caused by runtime extraction

pyinstaller --onefile --distpath dist --name arty-mc arty_mc/arty_mc.py

-—onedir: faster after initial startup

pyinstaller --onedir --distpath dist --name arty-mc arty_mc/arty_mc.py

The compiled executable will appear in:

dist/arty-mc/

You can run it without a Python environment.


Packaging and uploading the arty-mc Python library

You can also build this python package

git clone https://github.com/tino-waldner/arty-mc.git
cd arty-mc
mkdir .venv
python3 -m venv .venv
source .venv/bin/activate
pip install build twine
python -m build
twine check dist/*
twine upload dist/*

Security Notes

  • Do not commit your .arty-mc.yml file
  • Protect your API token
  • Prefer API tokens instead of passwords

Demo

Demo Cast


Disclaimer

This software is provided "as is" without warranty of any kind.

The tool may contain bugs or incomplete functionality and should be used at your own risk. The author assumes no responsibility or liability for any damage, data loss, system malfunction, or unintended modifications caused by the use of this software.

Always verify actions such as uploading, deleting, or overwriting artifacts, especially when working with production repositories.

This project is not affiliated with or endorsed by JFrog.

JFrog and Artifactory are trademarks of JFrog Ltd.


License

MIT License

Metadata

Release files for arty-mc 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arty-mc 0.3.0
File Size Uploaded Provenance Actions
arty_mc-0.3.0.tar.gz 89.6 kB Without provenance Details for arty_mc-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for arty-mc 0.3.0
File Interpreter ABI Platform Actions
arty_mc-0.3.0-py3-none-any.whl Python 3 none any Details for arty_mc-0.3.0-py3-none-any.whl

Total release size: 111.7 kB

Release files / arty_mc-0.3.0.tar.gz

Download URL arty_mc-0.3.0.tar.gz
Size 89.6 kB
Tags Source
SHA-256 checksum
How to use checksums
3503eb1028cf43c093cb6a5751a6a3b00e90107c960adc49d51f0aa1d299abf0
BLAKE2b-256 checksum
How to use checksums
9ef36a82dce91692142ef04ebd29ac52388b2f9bef94b5fa366bec246b78f7a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.1

Release files / arty_mc-0.3.0-py3-none-any.whl

Download URL arty_mc-0.3.0-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e529c71517e96869e34c9d4b58af9cf519f98bc601a5e8dd30b3ce4a7d44658a
BLAKE2b-256 checksum
How to use checksums
1293265d87d0e20690746966b1d25ae14ef1988821568c5e9077c9d2f013b33f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.1

Security for arty-mc 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page