Home

Awesome

TYPO3 Repository Client API/CLI

OBSOLETE!

This library uses the long-deprecated and now removed SOAP API for the TYPO3 Extension Repository. It is no longer functioning!

The library is archived and no longer receives updates. It is kept available here only for posterity.

Alternative

I recommend using the official "Tailor" library from TYPO3: https://github.com/TYPO3/tailor

The Tailor library allows you to interact with the TYPO3 Extension Repository using the current REST API. It is possible to use it from a local machine or through CI. An example GitHub action (for example as .github/workflows/release.yml):

on:
  push:
    tags:
      - "**"

jobs:
  release:
    runs-on: ubuntu-20.04
    steps:
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.2
          extensions: mbstring, json
          ini-values: date.timezone="Europe/Copenhagen", opcache.fast_shutdown=0
          tools: composer:v2.2
      - name: "create working directory"
        run: "mkdir tailor"
      - name: "Install Tailor"
        working-directory: tailor
        run: "composer require typo3/tailor"
      - name: "Upload to TER"
        working-directory: tailor
        run: "./vendor/bin/tailor ter:publish $TAG $EXTENSION_KEY --artefact $ARTEFECT_URL --comment \"$MESSAGE\""
        env:
          TYPO3_API_USERNAME: ${{ secrets.TER_USERNAME }}
          TYPO3_API_TOKEN: ${{ secrets.TER_TOKEN }}
          TAG: ${{ github.ref_name }}
          EXTENSION_KEY: testing
          ARTEFECT_URL: "https://github.com/${{ github.repository }}/archive/${{ github.ref }}.zip"
          MESSAGE: "Automatic release built from GitHub. See the CHANGELOG.md file that is shipped with this release for details."

(Requires two "secrets" entered in the GitHub repository; TER_TOKEN and TER_USERNAME. See Tailor's documentation for further information on how to obtain a token. Note that the token has a limited lifetime and will need to be refreshed.)

This action has the benefit that it does not operate on artefact files locally in the CI pipeline. Instead it refers TER to read the files from the artefect produced by GitHub whenever a new tag is uploaded. If you need/want to operate on files before a release is made, e.g. to remove certain files, Thomas Norre has provided a drop-in GitHub action that works in that particular way: https://github.com/tomasnorre/typo3-upload-ter

See Tailor's documentation for alternative CI integrations and manual usage instructions.

So long, and thanks for all the fish! ;)


Build Status Coverage Status

TYPO3 Extension Repository (TER) client library and CLI commands

Usage

Each command which can be executed has a corresponding class, for example NamelessCoder\TYPO3RepositoryClient\Uploader and a CLI script which acts as a wrapper for said class. The parameters which should be passed to each CLI script must be the same arguments and in the same order as required by the class' method.

Uploader

As component:

$uploader = new \NamelessCoder\TYPO3RepositoryClient\Uploader();
$uploader->upload('/path/to/extension', 'myusername', 'mypassword', 'An optional comment');

And as CLI command:

./bin/upload /path/to/extension myusername mypassword "An optional comment"

Version Updater (local)

As component:

$versioner = new \NamelessCoder\TYPO3RepositoryClient\Versioner();
$version = $versioner->read('/path/to/extension/');
$version[0] = '1.2.3';
$version[1] = 'beta';
$versioner->write('/path/to/extension/', '1.2.3', 'beta');

And as CLI command:

# with all parameters
./bin/setversion 1.2.3 beta /optional/path/to/extension/
# without changing current stability:
./bin/setversion 1.2.3

Version Deleter (admins only)

As component:

$deleter = new \NamelessCoder\TYPO3RepositoryClient\VersionDeleter();
$deleter->deleteExtensionVersion('extensionkey', '1.2.3', 'myusername', 'mypassword');

And as CLI command:

./bin/rmversion extensionkey 1.2.3 myusername mypassword

FAQ

Excluded files and folders