Skip to content

Feature parity with sapcli: detailed plan and subtasks #102

@ThePlenkov

Description

@ThePlenkov

Overview

sapcli is a mature, feature-rich Python CLI for SAP ADT that has become a de-facto standard for CI/CD automation with ABAP systems. This issue tracks a detailed plan to reach feature parity with sapcli in adt-cli, organized as actionable subtasks.

This is a tracking issue — each section corresponds to one or more focused implementation subtasks.


Current State Summary

Area sapcli adt-cli
ABAP object CRUD (class, program, interface, FUGR, DDIC…) ✅ Full create/write/activate/read/delete/whereused ⚠️ Partial (source get/put, adk internals; no dedicated per-type CLI commands)
AUnit (unit test runner) ✅ Full (human, junit4, sonar + coverage jacoco) ⚠️ Partial (human, junit4; no sonar, no coverage)
ATC (code quality) ✅ Full (run, customizing, profiles) ⚠️ Partial (run only; human, checkstyle, sarif, gitlab-cq)
CTS (transports) ✅ list, create, release, reassign, delete ⚠️ Partial (list, create, release, delete; no reassign)
gCTS (git-enabled CTS) ✅ Full (~20 subcommands) ❌ Not implemented
Package management ✅ create, list, delete, activate, check, stat ⚠️ get only
checkout / checkin (abapgit-compatible I/O) ✅ Full (class, program, interface, fugr, package) ⚠️ import (put) only; no per-type checkout
datapreview (OSQL queries) ✅ osql ❌ Not implemented
ABAP run (exec snippets) ✅ abap run ❌ Not implemented
User management ✅ details, create, change (RFC) ⚠️ search/get only
DDIC (data elements, domains, structures, tables) ✅ Full CRUD ❌ Not implemented
CDS/RAP (ddl, dcl, bdef, rap) ✅ Full CRUD ❌ Not implemented
BSP, Fiori (flp), strust, BAdI, authorizations ✅ Present ❌ Not implemented
Configuration (kubeconfig-style profiles) ✅ contexts, use-context ⚠️ Destinations but no context switching

Subtasks

1. 📦 Package Commands — create, list, delete, activate, stat

sapcli reference: sapcli package

Currently adt-cli only has adt package get. Add the following subcommands:

  • adt package create <name> <description> [--super-package] [--no-error-existing]
  • adt package list <name> [--recursive] [--long]
  • adt package delete <name> [--transport] [--recursive]
  • adt package activate <name...> [--recursive]
  • adt package stat <name> (exit code 0 = found, 10 = not found)
  • adt package check <name> (run ADT checks on all objects)

Relevant packages: adk, adt-cli


2. 🧬 Object CRUD Commands — class, program, interface, include, function group

sapcli reference: class, program, interface, functiongroup, include

The adk package already supports creating/writing/activating objects internally. What's missing is the user-facing CLI layer. Add dedicated commands:

  • adt class create <name> <desc> <package> / write / activate / read [--type defs|impls|tests] / delete / whereused / attributes / execute
  • adt program create / write / activate / read / delete / whereused
  • adt interface create / write / activate / read / delete / whereused
  • adt functiongroup create / write / activate / read / delete / whereused + include subcommands
  • adt include create / write / activate / read

All write/activate commands should accept --transport CORRNR, --activate, --ignore-errors, --warning-errors. Write should support - (stdin) as file input.

Relevant packages: adk, adt-cli


3. 🔬 DDIC Object Commands — data element, domain, structure, table

sapcli reference: dataelement, domain, structure, table

DDIC objects are used heavily in automated deployments. Add:

  • adt dataelement — create, write, activate, read, delete
  • adt domain — create, write, activate, read, delete
  • adt structure — create, write, activate, read, delete
  • adt table — create, write, activate, read, delete

Relevant packages: adk, adt-schemas, adt-cli


4. 🔷 CDS/RAP Object Commands — ddl, dcl, bdef

sapcli reference: ddl, dcl, bdef, rap

Modern ABAP development relies heavily on CDS/RAP. Add:

  • adt ddl — create, write, activate, read, delete
  • adt dcl — create, write, activate, read, delete
  • adt bdef — create, write, activate, read, delete
  • adt rap — RAP Business Service binding operations

Relevant packages: adk, adt-schemas, adt-cli


5. 🧪 AUnit Enhancements — coverage, sonar output, more object types

sapcli reference: aunit

The existing adt-aunit plugin supports run with human and junit4 output. Missing:

  • --output sonar — Sonar Generic Execution format (links findings to local checkout files)
  • --result {unit,coverage,all} — include coverage data in run
  • --coverage-output {raw,human,jacoco} — coverage result format
  • --coverage-filepath <path> — write coverage to file
  • --report-missed-lines — append missed-lines section to human output
  • Object type: program-include (with main program inference from MAIN\INCLUDE notation)
  • Object type: transport — run tests on all objects in a transport (with --as4user)
  • --compat flag for legacy ADT endpoints
  • Non-zero exit code equal to number of failed+errored tests

Relevant packages: adt-aunit


6. 🔍 ATC Enhancements — customizing, profile management

sapcli reference: atc

The existing adt-atc plugin supports run only. Add:

  • adt atc customizing — fetch and display ATC configuration (active variant, CI mode)
  • adt atc profile list [--long] [--output json] — list ATC profiles
  • adt atc profile dump [-p PROFILE...] [--checkman] — dump full profile content as JSON
  • adt atc run --output html — HTML table format for findings

Relevant packages: adt-atc


7. 🚌 CTS Enhancements — reassign command

sapcli reference: cts

The existing adt cts tr subcommand already covers list/get/create/delete/release. Add:

  • adt cts tr reassign <number> <new-owner> [--recursive] — change transport/task owner

Relevant packages: adt-cli


8. 🔄 gCTS (git-enabled CTS) — full implementation

sapcli reference: gcts

gCTS enables native git workflows in SAP systems. This is a large feature area not yet in adt-cli. Key subcommands:

  • adt gcts repolist — list gCTS repositories
  • adt gcts clone <url> [package] [--wait-for-ready] [--vsid] [--starting-folder] [--vcs-token]
  • adt gcts checkout <package> <branch> [--wait-for-ready] [--no-import]
  • adt gcts log <package>
  • adt gcts pull <package>
  • adt gcts push <package>
  • adt gcts commit <package> [transport] [-m message] [--description]
  • adt gcts delete <package>
  • adt gcts config <package> [name] [value] [--unset]
  • adt gcts user get-credentials / set-credentials / delete-credentials
  • adt gcts repo set-url / property get/set / branch create/delete/list / activities / messages / objects / tasks
  • adt gcts system config get/list/set/unset
  • adt gcts task info/list/delete

Relevant packages: new adt-gcts package or extension of adt-cli


9. 📥 checkout Command — abapgit-compatible export to local files

sapcli reference: checkout

adt-cli has adt-export (import/export plugin) but lacks the simple per-object-type checkout that downloads source to abapgit-compatible local files. Add:

  • adt checkout class <name> — downloads all source parts to <name>.clas.*.abap
  • adt checkout program <name>
  • adt checkout interface <name>
  • adt checkout function_group <name>
  • adt checkout package <name> [dir] [--recursive] [--starting-folder] — full package checkout with .abapgit.xml

This overlaps with adt-export / adt-plugin-abapgit — evaluate reuse opportunities.

Relevant packages: adt-export, adt-plugin-abapgit, adt-cli


10. 🗄️ datapreview — OSQL queries via ADT SQL console

sapcli reference: datapreview

Extremely useful for ad-hoc queries and CI scripts (e.g., looking up transport user). Add:

  • adt datapreview osql "<statement>" [--output human|json] [--rows N] [--noheadings] [--noaging]

Relevant packages: adt-client, adt-cli


11. ⚡ abap run — execute ABAP snippets

sapcli reference: abap

Widely used for CI scripts and coding agents. Creates a temporary if_oo_adt_classrun class, runs it, then unconditionally deletes it. Add:

  • adt abap run <file>|- — run ABAP from file or stdin
    • --prefix <prefix> — class name prefix (default: zcl_adtcli_run)
    • --package <package> — package for temp class (default: $tmp)

The adt class execute command (subtask #2) provides the underlying mechanism.

Relevant packages: adk, adt-cli


12. 👤 User Management — create and modify users

sapcli reference: user

Currently adt user only supports search/get. Add (requires RFC or ADT user management endpoints):

  • adt user create [--type Dialog|Service|System] [--password PASSWORD] <username>
  • adt user change [--password PASSWORD] <username>

Note: sapcli implements this via RFC. Evaluate whether ADT has equivalent endpoints first.

Relevant packages: adt-client, adt-cli


13. 🔐 Authorization & SSL — strust, authorizations

sapcli reference: strust, authorizations

Infrastructure management commands:

  • adt strust — SSL certificate management (upload/list/delete certificates)
  • adt authorizations — authorization fields, objects, transactions, and defaults

Relevant packages: adt-client, adt-cli


14. 🏢 BSP, Fiori Launchpad, Feature Toggles, BAdI

sapcli reference: bsp, flp, featuretoggle, badi

Lower priority but useful for complete coverage:

  • adt bsp — BSP application management
  • adt flp — Fiori Launchpad operations
  • adt featuretoggle — Feature Toggle management
  • adt badi — New-style BAdI (Enhancement) operations

15. ⚙️ Multi-system Configuration — kubeconfig-style contexts

sapcli reference: configuration docs

sapcli supports a ~/.sapcli/config.yml with named connections, users, and contexts — enabling sapcli --context qa aunit run class zcl_foo. adt-cli has destinations but lacks context switching shorthand. Add:

  • adt config use-context <name> — set active context
  • --context <name> / ADTCLI_CONTEXT=<name> global flag for per-invocation override
  • Named connection profiles in ~/.adt/config.yml (or equivalent)

Relevant packages: adt-config, adt-cli


Priority Recommendation

Priority Subtasks Rationale
🔴 High #1 (package), #2 (object CRUD), #5 (aunit enhancements), #6 (atc enhancements), #10 (datapreview), #11 (abap run) Core CI/CD automation workflows
🟡 Medium #3 (DDIC), #4 (CDS/RAP), #7 (CTS reassign), #8 (gCTS), #9 (checkout), #15 (config contexts) Advanced automation and modern ABAP
🟢 Low #12 (user mgmt), #13 (strust/auth), #14 (bsp/flp/badi/toggles) Infrastructure / niche use cases

Notes

Metadata

Metadata

Labels

kilo-duplicateAuto-generated label by Kilokilo-triagedAuto-generated label by Kilo

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions