Simple static Composer repository generator - For a full private Composer repo use Private Packagist

Overview

Satis

Simple static Composer repository generator.

Run from source

Satis requires a recent PHP version, it does not run with unsupported PHP versions. Check the composer.json file for details.

  • Install satis: composer create-project composer/satis:dev-main
  • Build a repository: php bin/satis build <configuration-file> <output-directory>

Read the more detailed instructions in the documentation.

Run as Docker container

Pull the image:

docker pull composer/satis

Run the image (with Composer cache from host):

docker run --rm --init -it \
  --user $(id -u):$(id -g) \
  --volume $(pwd):/build \
  --volume "${COMPOSER_HOME:-$HOME/.composer}:/composer" \
  composer/satis build <configuration-file> <output-directory>

If you want to run the image without implicitly running Satis, you have to override the entrypoint specified in the Dockerfile:

--entrypoint /bin/sh

Purge

If you choose to archive packages as part of your build, over time you can be left with useless files. With the purge command, you can delete these files.

php bin/satis purge <configuration-file> <output-dir>

Note: don't do this unless you are certain your projects no longer reference any of these archives in their composer.lock files.

Updating

Updating Satis is as simple as running git pull && composer install in the Satis directory.

If you are running Satis as a Docker container, simply pull the latest image.

Contributing

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Fork the project, create a feature branch, and send us a pull request.

If you introduce a new feature, or fix a bug, please try to include a testcase.

Authors

See the list of contributors who participate(d) in this project.

Community Tools

  • satis-go - A simple web server for managing Satis configuration and hosting the generated Composer repository.
  • satisfy - Symfony based composer repository manager with a simple web UI.
  • satis-control-panel - Simple web UI for managing your Satis Repository with optional CI integration.
  • composer-satis-builder - Simple tool for updating the Satis configuration (satis.json) "require" key on the basis of the project composer.json.

Examples

License

Satis is licensed under the MIT License - see the LICENSE file for details

Comments
  • Update Satis UI to Bootstrap 4

    Update Satis UI to Bootstrap 4

    This PR freshens up the Satis UI by upgrading it from Bootstrap 3 to Bootstrap 4. It also updates the JavaScript code, which has been converted to modern ES6 classes.

    Some things worth noting:

    • Both CSS and JS have been compiled using Webpack (with Webpack Encore for an easier setup).
    • Overall assets size has dropped from ~280Kb to ~180Kb.
    • Contains a longer explanation on how to set up the repository, which I largely took from here.

    Here's how it looks: Screenshot 1

    And here is the detail of the setup info: screenshot 2

    opened by antoniocambados 29
  • Added

    Added "enforce-dependencies" option to enforce constraints on packages

    Context/Problem : when using satis with the option "require-dependencies" : "true" and not in "require-all" mode, satis is resolving required dependencies to deduce which package versions should be downloaded. When you set a constraint on a package in the satis json, unfortunately if a dependency (or a dependency of a dependency) is declaring broader versions, then satis will fetch those additionnal versions.

    Proposed solution : i added a new option named "enforce-dependencies" which allow to restrict dependencies on downloaded packages.

    Remark : the patch is really not perfect, and i'm new to the satis source code, i will be happy to discuss that change.

    opened by mikaelmeulle 29
  • Allow to run a satis build for one repo/package

    Allow to run a satis build for one repo/package

    Added an additional flag to generate the satis build for a single package. This helps to speed up the satis run if you have to deal with a lot of repos. In our case Jenkins will trigger the satis build after a new release was created. Since we have a lot packages (with a lot of versions) in our local satis repo, I was looking for a way to speed up the satis run.

    opened by shochdoerfer 26
  • Add prettier and eslint

    Add prettier and eslint

    • Adds prettier and eslint with pre-commit hooks so that relevant files are linted and formatted during commit
    • Latest version of Encore now supports latest version of sass-loader, so bump all dependencies
    • Remove the one usage of optional chaining, it wasn't needed and violates the new eslint rules
    • Remove unused popper.js dependency
    • Expose script for composer test so you can run the project's tests with the same version of PHPUnit that the CI checks will use
    opened by theimbender 24
  • ErrorException: copy(/tmp/composer_archive60e5622111255.tar): Failed to open stream: No such file or directory

    ErrorException: copy(/tmp/composer_archive60e5622111255.tar): Failed to open stream: No such file or directory

    Hello, I've deployed a satis instance using the satis.json from k8s : 1、the configmap file is below:

    apiVersion:` v1
    kind: ConfigMap
    metadata:
      name: satis-config-cm
      namespace: martin-test
    data:
      satis.json: |-
        {
            "name": "martin/composer-repository",
            "homepage": "https://satis.martin.com",
            "require": {
                "guzzlehttp/guzzle": "^6.5",
                "illuminate/redis": "5.7.*",
                "jenssegers/mongodb": "3.4.*",
                "laravel/lumen-framework": "5.7.*",
                "lcobucci/jwt": "^3.3",
                "overtrue/socialite": "^2.0",
                "predis/predis": "^1.1",
                "ramsey/uuid": "^3.9",
                "vlucas/phpdotenv": "~2.2",
                "fzaninotto/faker": "~1.4",
                "mnabialek/laravel-sql-logger": "^2.2",
                "mockery/mockery": "~1.0",
                "phpunit/phpunit": "~7.0",
                "yiisoft/yii2": ">=2.0.13",
                "yiisoft/yii2-bootstrap": "*",
                "yiisoft/yii2-swiftmailer": "*",
                "feehi/yii2-swoole": ">=0.0.5",
                "feehi/yii2-cdn" : "*",
                "yiisoft/yii2-imagine": "^2.1",
                "qcloudsms/qcloudsms_php": "0.1.*",
                "kartik-v/yii2-widget-select2": "@dev",
                "moonlandsoft/yii2-phpexcel": "*",
                "kartik-v/yii2-export":"*",
                "kartik-v/yii2-widget-datetimepicker":"*",
                "kartik-v/yii2-date-range":"dev-master",
                "yiisoft/yii2-redis": "^2.0",
                "sizeg/yii2-jwt": "^2.0",
                "yiisoft/yii2-queue": "^2.3",
                "yiisoft/yii2-debug": "~2.0.0",
                "yiisoft/yii2-gii": "~2.0.0",
                "yiisoft/yii2-faker": "~2.0.0",
                "codeception/base": "^2.2.3",
                "codeception/verify": "~0.3.1",
                "guzzlehttp/guzzle": ">=4.1.4 <7.0",
                "fxp/composer-asset-plugin": "*",
                "bower-asset/yii2-pjax": "~2.0.1",
                "bower-asset/typeahead.js": "0.10.* | ~0.11.0",
                "bower-asset/punycode": "1.3.*",
                "bower-asset/jquery": "3.4.*",
                "bower-asset/inputmask": "~3.2.2 | ~3.3.5",
                "bower-asset/bootstrap": "3.4.* | 3.3.* | 3.2.* | 3.1.*",
                "encore/laravel-admin": "1.6.13",
                "fideloper/proxy": "~3.3",
                "intervention/image": "^2.5",
                "laravel/framework": "5.5.*",
                "laravel/tinker": "~1.0",
                "maatwebsite/excel": "2.1.30 | 3.0.1 | 3.1.10 | 3.1.15 | 3.1.16 | 3.1.17",
                "nesbot/carbon": "^1.29.1",
                "qcloud/cos-sdk-v5": "2.0.3",
                "filp/whoops": "~2.0",
                "symfony/thanks": "^1.0",
                "tencentcloud/tencentcloud-sdk-php": ">=3.0.400 < 3.0.410",
                "tymon/jwt-auth": "^1.0",
                "php-ffmpeg/php-ffmpeg": "^0.18.0"
            },
            "archive": {
                "directory": "dist",
                "format": "tar",
                "prefix-url": "https://satis.martin.com",
                "skip-dev": true
            },
            "require-all": false,
            "require-dependencies": true,
            "require-dev-dependencies": true,
            "repositories": [
                { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" },
                { "type": "composer", "url": "https://asset-packagist.cn" }
            ]
        }
    

    and i have deployed the satis pod using the persistent volumn that is the way of hostpath

    2、the deployment file is below:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: satis-app
      namespace: martin-test
      labels:
        app: satis-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: satis-app
      template:
        metadata:
          labels:
            app: satis-app
        spec:
          hostAliases:
          - ip: "10.0.3.90"
            hostnames:
            - "git.martin.com"
          - ip: "10.0.3.40"
            hostnames:
            - "satis.martin.com"
          containers:
            - name: composer
              image: composer/satis:latest
              #imagePullPolicy: Always
              workingDir: /build
              volumeMounts:
              - name: build-data
                mountPath: /build/output
              - name: satis-config-cm
                mountPath: /build/satis.json
                subPath: satis.json
              - name: satis-composer-cm
                mountPath: /composer/composer.json
                subPath: composer.json
              env:
                - name: TZ
                  value: "Asia/Shanghai"
            - name: nginx
              image: "nginx:1.17.9"
              #imagePullPolicy: Always
              workingDir: /etc/nginx/conf.d
              env:
                - name: TZ
                  value: "Asia/Shanghai"
              volumeMounts:
              - mountPath: /data/wwwroot/satis
                name: build-data
              - mountPath: /etc/nginx/conf.d/ 
                name: satis-nginx-cm
              - mountPath: /data/logs/nginx
                name: satis-logs-pvc
                #subPath: nginx
              ports:
                - name: http
                  containerPort: 80
                  protocol: TCP
          imagePullSecrets:
          - name: qcloudregistrykey
          - name: tencenthubkey
          volumes:
          - name: build-data
            #emptyDir: {}
            #persistentVolumeClaim:
            #  claimName: satis-data-pvc
            hostPath:
              #path: /var/lib/docker/satis_data_modify
              path: /var/lib/docker/satis_data
          - name: satis-logs-pvc
            emptyDir: {}
          - name: satis-nginx-cm
            configMap:
              name: satis-nginx
          - name: satis-config-cm
            configMap:
              name: satis-config-cm
          - name: satis-composer-cm
            configMap:
              name: satis-composer-cm
          nodeSelector:
            satis: "true"
    

    but when the pod is running, i find the error logs: image

    could you help me to solve the problem, thanks very much!

    bug 
    opened by hannius 21
  • Permission bits are lost in archives

    Permission bits are lost in archives

    It seems that files in archived packages are loosing permission bits on Linux, in my case the executable flag which was set for a php file. I tried both zip and tar archive formats.

        "archive": {
            "directory": "dist",
            "skip-dev": true,
            "format": "tar"
        }
    

    The permission bits are preserved if I use the --prefer-source flag while installing the package.

    I also tried to create an archive using composer archive which has the same problem.

    Is there a way to preserve the permission bits in archives on Linux? Thanks

    support 
    opened by doalex 21
  • Many silent failures == inability to create repo

    Many silent failures == inability to create repo

    I'm attempting to rebuild the ZF2 composer repository (https://packages.zendframework.com), as we have recently split our components into dedicated development repositories (which has necessitated changing URIs).

    The satis.json I'm working with is this:

    {
      "name": "Zend Framework Repository",
      "homepage": "https://packages.zendframework.com",
      "repositories": [
        {"type": "vcs", "url": "https://github.com/zendframework/zend-authentication.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-barcode.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-cache.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-captcha.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-code.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-config.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-console.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-crypt.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-db.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-debug.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-di.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-dom.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-escaper.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-eventmanager.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-feed.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-file.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-filter.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-form.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-http.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-i18n.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-i18n-resources.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-inputfilter.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-json.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-ldap.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-loader.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-log.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-mail.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-math.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-memory.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-mime.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-modulemanager.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-mvc.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-navigation.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-paginator.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-permissions-acl.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-permissions-rbac.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-progressbar.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-serializer.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-server.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-servicemanager.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-session.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-soap.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-stdlib.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-tag.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-test.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-text.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-uri.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-validator.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-version.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-view.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zend-xmlrpc.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendCloud.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendDeveloperTools.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendGData.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendOAuth.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendOpenId.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendPdf.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendQueue.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendRest.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_AgileZen.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Akismet.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Amazon.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Api.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Apple_Apns.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Audioscrobbler.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Delicious.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_DeveloperGarden.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Flickr.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_GoGrid.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Google_C2dm.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Google_Gcm.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_LiveDocx.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Nirvanix.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_OpenStack.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Rackspace.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_ReCaptcha.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_SlideShare.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_StrikeIron.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Technorati.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_Twitter.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendService_WindowsAzure.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendXml.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZendSkeletonApplication.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zf1.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/zf2.git"},
        {"type": "vcs", "url": "https://github.com/zendframework/ZFTool.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-angular.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-admin.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-admin-ui.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-doctrine.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-documentation.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-documentation-swagger.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-example.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-provider.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-skeleton.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-apigility-welcome.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-api-problem.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-configuration.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-console.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-content-negotiation.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-content-validation.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-deploy.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-development-mode.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-doctrine-querybuilder.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-hal.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-http-cache.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-mvc-auth.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-oauth2.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-rest.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-rpc.git"},
        {"type": "vcs", "url": "https://github.com/zfcampus/zf-versioning.git"}
      ],
      "require-all": true,
      "archive": {
        "directory": "composer",
        "format": "zip",
        "skip-dev": false
      }
    }
    

    I then execute this using

    $ ./bin/satis build ./satis.json ../../public
    

    I have run into several errors, however, that I cannot figure out how to recover from.

    First, frequent errors of the following nature:

    ZipArchive::extractTo(...) : failed to open stream: Invalid argument
    

    The only way to recover from the above is to remove the line for that component, unfortunately.

    Second, I am frequently seeing 255 exit status codes with no error information whatsoever, even when running using -vvv. The specific one that tends to create the 255 error code regularly is zendframework/zendframework1:1.12.0; I have a sneaking suspicion that we may be hitting either a timeout or memory condition (as it's a very, very large package).

    The end result of both, however, is that I am unable to complete a build of the repository with the full set of components we wish to provide.

    Any tips or suggestions are welcome.

    opened by weierophinney 20
  • Github Webhook Integration

    Github Webhook Integration

    Github has this wonderful feature of webhooks, which is beautifully generic. Now instead of running a satis update every 2 minutes, wouldn't it be much more convenient to run the update only when the webhook is called? Our installation has only a handful of repos in it, mostly libraries that change either multiple times in a day or then not for days or even weeks. So instead of running a cronjob every 5 minutes to ensure the packages.json is fresh, the webhook would be the ideal candidate for the task.

    I'm currently working on creating something like this. I don't know yet how exactly I'll be implementing it, but I would love to hear input, so maybe I can publish my efforts here later.

    feature 
    opened by ChristianRiesen 20
  • support vcs on repos without composer.json

    support vcs on repos without composer.json

    info: i use the yaml to json converter, so the following config parts are yml styled.

    for example, if i want to include twitter bootstrap from the official repo, the following code works quite well:

    repositories:
        # twitter/bootstrap
        - { type: package, package: { name: twitter/bootstrap, version: 2.0.0, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: v2.0.0 } } }
        - { type: package, package: { name: twitter/bootstrap, version: 2.0.1, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: v2.0.1 } } }
        - { type: package, package: { name: twitter/bootstrap, version: 2.0.2, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: v2.0.2 } } }
        - { type: package, package: { name: twitter/bootstrap, version: 2.0.3, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: v2.0.3 } } }
        - { type: package, package: { name: twitter/bootstrap, version: 2.0.4, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: v2.0.4 } } }
        - { type: package, package: { name: twitter/bootstrap, version: 2.1.0, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: origin/2.1.0-wip } } }
    

    php bin/satis --verbose build config/config.json ../web/ produces a nice packages file

    Scanning packages
    Selected twitter/bootstrap (2.0.0)
    Selected twitter/bootstrap (2.0.1)
    Selected twitter/bootstrap (2.0.2)
    Selected twitter/bootstrap (2.0.3)
    Selected twitter/bootstrap (2.0.4)
    Selected twitter/bootstrap (2.1.0)
    

    but having

    repositories:
        # twitter/bootstrap
        - { type: vcs, url: 'https://github.com/twitter/bootstrap.git' } #no composer
    

    leads to

    Reading composer.json of https://github.com/twitter/bootstrap.git (v1.2.0)
    Skipped tag v1.2.0, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (v1.1.1)
    Skipped tag v1.1.1, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (v1.1.0)
    Skipped tag v1.1.0, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (v1.0.0)
    Skipped tag v1.0.0, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (v1.4.0)
    ... snip ...
    Reading composer.json of https://github.com/twitter/bootstrap.git (v2.0.2)
    Skipped tag v2.0.2, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (2.1.0-wip)
    Skipped branch 2.1.0-wip, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (gh-pages)
    Skipped branch gh-pages, no composer file
    Reading composer.json of https://github.com/twitter/bootstrap.git (master)
    Skipped branch master, no composer file
    

    so this is unhelpful. satis connects to the repo, reads the tag and uses it for an error message. why not generate

    repositories:
        # twitter/bootstrap
        - { type: package, package: { name: twitter/bootstrap, version: %%calculated_version_number%%, source: { url: 'https://github.com/twitter/bootstrap.git', type: git, reference: %%tag_or_branch_composer_read%% } } }
        ...
    

    this would really help and also really push composer. the only difficult here is to caclulate the %%calculated_version_number%% from the %%tag_or_branch_composer_read%%

    where to add this code? satis is using composer, does satis generate this error meassage or is it composer? where to add what? if you can lead me the right direction i can try building a PR

    feature 
    opened by c33s 20
  • Please tag a version

    Please tag a version

    Hi,

    I've started to use Satis as a local repository for managing dependencies. However it does not have any tags so it is not possible to use Composer to install a known reliable version of Satis, instead only the latest dev master can be installed.

    Please could you start tagging Satis?

    cheers Dan

    opened by Danack 19
  • Support composer 2.0 output format

    Support composer 2.0 output format

    Adds a new option to output packages following the new composer 2.0 format. Keep the existing package dumps for compatibility with composer 1.

    Example for this simple satis.json:

    {
      "name": "corp/satis",
      "homepage": "http://127.0.0.1",
      "repositories": [
        {"type": "vcs", "url": "https://github.com/php-fig/log"},
        {"type": "vcs", "url": "[email protected]:Seldaek/monolog.git"}
      ]
    }
    

    Output structure: image

    Notes:

    • The new option "minified": "composer/2.0" has not been implemented, since it requires composer 2.0.
    • "available-packages" can be implemented later.
    • provider-api can be implemented later.
    opened by GromNaN 18
  • Purge fails if unreferenced file to remove is already missing

    Purge fails if unreferenced file to remove is already missing

    Not sure if this is the expected behavior or not to just fail instead of continue, but it seems that there is possibly some missing exception catching around unlinking of files?

    $ php bin/satis purge ../satis.json /path/to/repository
    File '/path/to/repository/include/all$4ab2d531543982a6cac0c06a846341276ba2c450.json' does not exist, defined in "includes" in '/path/to/repository/packages.json'
    In PurgeCommand.php line 131:
    
      unlink(/path/to/repository/dist/org/package/org-package-3fddb6037bea4aee926
      5210f76e8e64068eb076e-zip-a8e20d.zip): No such file or directory
    
    purge [<file> [<output-dir> [<dry-run>]]]
    
    opened by ikari7789 1
  • Satis fails to archive dependencies for required packages

    Satis fails to archive dependencies for required packages

    Describe the bug When satis builds packages, I expect the requirements to those packages to be archived as well as the original packages, but this does not appear to happen, instead it appears to be having trouble finding these third party pacakges.

    To Reproduce satis.json

    {
      "name": "some-company/satis",
      "homepage": "https://some-where.company.net",
      "repositories": [
        {
          "type": "composer",
          "url": "https://packagist.org"
        },
        {
          "name": "some-company/utilities",
          "type": "hg",
          "url": "/var/www/repos/Some_Company_Utilities"
        }
      ],
      "require": {
        "some-company/utilities": "*"
      },
      "require-all": false,
      "require-dependencies": true,
      "require-dev-dependencies": true,
      "archive": {
        "directory": "dist",
        "format": "tar"
      }
    }
    

    The command run php -d memory_limit=2GB bin/satis build satis.json web/ -n --skip-errors some-company/utilities

    Outcome

    Checked CA file /etc/pki/tls/certs/ca-bundle.crt does not exist or it is not a file.
    Checked directory /etc/pki/tls/certs/ca-bundle.crt does not exist or it is not a directory.
    Checked CA file /etc/ssl/certs/ca-certificates.crt: valid
    Executing command (/var/www/satis): git branch -a --no-color --no-abbrev -v
    Failed to initialize global composer: Composer could not find the config file: /var/www/.composer/composer.json
    
    Reading /var/www/satis/vendor/composer/installed.json
    Scanning packages
    Executing command (/var/www/repos/Some_Company_Utilities): hg tags
    Executing command (/var/www/repos/Some_Company_Utilities): hg branches
    Executing command (/var/www/repos/Some_Company_Utilities): hg bookmarks
    Executing command (/var/www/repos/Some_Company_Utilities): hg tip --template "{node}"
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'c3cad9817032a738665b50675821c5514a6dbd1f' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'c3cad9817032a738665b50675821c5514a6dbd1f'
    Reading composer.json of some-company/utilities (3.0.1)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '303204f83d8b' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '303204f83d8b'
    Importing tag 3.0.1 (3.0.1.0)
    Reading composer.json of some-company/utilities (3.0.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'c91da6b7cbfc' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'c91da6b7cbfc'
    Importing tag 3.0.0 (3.0.0.0)
    Reading composer.json of some-company/utilities (2.4.9)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'a0e4e75cf69d' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'a0e4e75cf69d'
    Importing tag 2.4.9 (2.4.9.0)
    Reading composer.json of some-company/utilities (2.4.8)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '5134c921991d' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '5134c921991d'
    Importing tag 2.4.8 (2.4.8.0)
    Reading composer.json of some-company/utilities (2.4.7)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '18ac162740e3' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '18ac162740e3'
    Importing tag 2.4.7 (2.4.7.0)
    Reading composer.json of some-company/utilities (2.4.6)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'b39fd77f1af0' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'b39fd77f1af0'
    Importing tag 2.4.6 (2.4.6.0)
    Reading composer.json of some-company/utilities (2.4.5)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'f5a7ec4a0603' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'f5a7ec4a0603'
    Importing tag 2.4.5 (2.4.5.0)
    Reading composer.json of some-company/utilities (2.4.4)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '3f5017d70d24' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '3f5017d70d24'
    Importing tag 2.4.4 (2.4.4.0)
    Reading composer.json of some-company/utilities (2.4.3)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'ae95193ac2d8' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'ae95193ac2d8'
    Importing tag 2.4.3 (2.4.3.0)
    Reading composer.json of some-company/utilities (2.4.2)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '03c3aa2b5aaf' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '03c3aa2b5aaf'
    Importing tag 2.4.2 (2.4.2.0)
    Reading composer.json of some-company/utilities (2.4.1)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '198a59d0b274' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '198a59d0b274'
    Importing tag 2.4.1 (2.4.1.0)
    Reading composer.json of some-company/utilities (2.4.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '3e4ca1cebe18' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '3e4ca1cebe18'
    Importing tag 2.4.0 (2.4.0.0)
    Reading composer.json of some-company/utilities (2.3.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'f0af2c1e8ba1' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'f0af2c1e8ba1'
    Importing tag 2.3.0 (2.3.0.0)
    Reading composer.json of some-company/utilities (2.2.11)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '1cc2ab7e4c4e' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '1cc2ab7e4c4e'
    Importing tag 2.2.11 (2.2.11.0)
    Reading composer.json of some-company/utilities (2.2.10)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '70825b7209f1' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '70825b7209f1'
    Importing tag 2.2.10 (2.2.10.0)
    Reading composer.json of some-company/utilities (2.2.9)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '09da5e1f8c6c' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '09da5e1f8c6c'
    Importing tag 2.2.9 (2.2.9.0)
    Reading composer.json of some-company/utilities (2.2.8)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '4b944f06289d' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '4b944f06289d'
    Importing tag 2.2.8 (2.2.8.0)
    Reading composer.json of some-company/utilities (2.2.7)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '1bcdb1b49345' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '1bcdb1b49345'
    Importing tag 2.2.7 (2.2.7.0)
    Reading composer.json of some-company/utilities (2.2.6)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'd5c5ff1c68b2' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'd5c5ff1c68b2'
    Importing tag 2.2.6 (2.2.6.0)
    Reading composer.json of some-company/utilities (2.2.5)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '850b2ffd1769' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '850b2ffd1769'
    Importing tag 2.2.5 (2.2.5.0)
    Reading composer.json of some-company/utilities (2.2.4)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '48815fe42547' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '48815fe42547'
    Importing tag 2.2.4 (2.2.4.0)
    Reading composer.json of some-company/utilities (2.2.3)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '547ee5923fc3' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '547ee5923fc3'
    Importing tag 2.2.3 (2.2.3.0)
    Reading composer.json of some-company/utilities (2.2.2)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'c48740151b8d' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'c48740151b8d'
    Importing tag 2.2.2 (2.2.2.0)
    Reading composer.json of some-company/utilities (2.2.1)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '870be79d40ec' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '870be79d40ec'
    Importing tag 2.2.1 (2.2.1.0)
    Reading composer.json of some-company/utilities (2.2.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '92d61bcea00e' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '92d61bcea00e'
    Importing tag 2.2.0 (2.2.0.0)
    Reading composer.json of some-company/utilities (2.1.3)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '2122803d4ac5' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '2122803d4ac5'
    Importing tag 2.1.3 (2.1.3.0)
    Reading composer.json of some-company/utilities (2.1.2)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '7de21b72c359' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '7de21b72c359'
    Importing tag 2.1.2 (2.1.2.0)
    Reading composer.json of some-company/utilities (2.1.1)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '2295d24eb0e2' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '2295d24eb0e2'
    Importing tag 2.1.1 (2.1.1.0)
    Reading composer.json of some-company/utilities (2.1.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'e3ee2fcae340' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'e3ee2fcae340'
    Importing tag 2.1.0 (2.1.0.0)
    Reading composer.json of some-company/utilities (2.0.2)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '873d96d47ff4' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '873d96d47ff4'
    Importing tag 2.0.2 (2.0.2.0)
    Reading composer.json of some-company/utilities (2.0.1)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'f837d4487e35' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'f837d4487e35'
    Importing tag 2.0.1 (2.0.1.0)
    Reading composer.json of some-company/utilities (2.0.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '67dbc6ba898a' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '67dbc6ba898a'
    Importing tag 2.0.0 (2.0.0.0)
    Reading composer.json of some-company/utilities (1.0.2)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '7e5641db3de1' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '7e5641db3de1'
    Importing tag 1.0.2 (1.0.2.0)
    Reading composer.json of some-company/utilities (1.0.1)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'b2e5cce11573' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'b2e5cce11573'
    Importing tag 1.0.1 (1.0.1.0)
    Reading composer.json of some-company/utilities (1.0.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '70392abca339' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '70392abca339'
    Importing tag 1.0.0 (1.0.0.0)
    Reading composer.json of some-company/utilities (0.2.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'f788bdbd1fe9' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'f788bdbd1fe9'
    Importing tag 0.2.0 (0.2.0.0)
    Reading composer.json of some-company/utilities (0.1.29)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '4009b69a70d9' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '4009b69a70d9'
    Importing tag 0.1.29 (0.1.29.0)
    Reading composer.json of some-company/utilities (0.1.28)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '197051b64069' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '197051b64069'
    Importing tag 0.1.28 (0.1.28.0)
    Reading composer.json of some-company/utilities (0.1.27)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '92fe7fefaf4d' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '92fe7fefaf4d'
    Importing tag 0.1.27 (0.1.27.0)
    Reading composer.json of some-company/utilities (0.1.26)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '80231ed588bd' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '80231ed588bd'
    Importing tag 0.1.26 (0.1.26.0)
    Reading composer.json of some-company/utilities (0.1.25)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '6384ad1df541' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '6384ad1df541'
    Importing tag 0.1.25 (0.1.25.0)
    Reading composer.json of some-company/utilities (0.1.24)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'c5a5f4e208b1' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'c5a5f4e208b1'
    Importing tag 0.1.24 (0.1.24.0)
    Reading composer.json of some-company/utilities (0.1.23)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'a42724b384bd' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'a42724b384bd'
    Importing tag 0.1.23 (0.1.23.0)
    Reading composer.json of some-company/utilities (0.1.22)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '4e1d550c3522' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '4e1d550c3522'
    Importing tag 0.1.22 (0.1.22.0)
    Reading composer.json of some-company/utilities (0.1.21)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '3f1ff34558d4' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '3f1ff34558d4'
    Importing tag 0.1.21 (0.1.21.0)
    Reading composer.json of some-company/utilities (0.1.20)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '4a12786ac23b' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '4a12786ac23b'
    Importing tag 0.1.20 (0.1.20.0)
    Reading composer.json of some-company/utilities (0.1.19)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '31b8b8df0ce9' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '31b8b8df0ce9'
    Importing tag 0.1.19 (0.1.19.0)
    Reading composer.json of some-company/utilities (0.1.18)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '58d98de5a6a3' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '58d98de5a6a3'
    Importing tag 0.1.18 (0.1.18.0)
    Reading composer.json of some-company/utilities (0.1.17)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'ba1d2cbfb9f7' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'ba1d2cbfb9f7'
    Importing tag 0.1.17 (0.1.17.0)
    Reading composer.json of some-company/utilities (0.1.15)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '1058106ae938' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '1058106ae938'
    Importing tag 0.1.15 (0.1.15.0)
    Reading composer.json of some-company/utilities (0.1.14)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'b2e6af7e4139' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'b2e6af7e4139'
    Importing tag 0.1.14 (0.1.14.0)
    Reading composer.json of some-company/utilities (0.1.13)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '1b0aa07f5c8c' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '1b0aa07f5c8c'
    Importing tag 0.1.13 (0.1.13.0)
    Reading composer.json of some-company/utilities (0.1.12)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '1e1635b7ec05' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '1e1635b7ec05'
    Importing tag 0.1.12 (0.1.12.0)
    Reading composer.json of some-company/utilities (0.1.11)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '63a7a670da9c' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '63a7a670da9c'
    Importing tag 0.1.11 (0.1.11.0)
    Reading composer.json of some-company/utilities (develop)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'a78055576e3c' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'a78055576e3c'
    Importing branch develop (dev-develop)
    Reading composer.json of some-company/utilities (f/202201-gw-cp-3261-update-di)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '42798d0be7de' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '42798d0be7de'
    Importing branch f/202201-gw-cp-3261-update-di (dev-f/202201-gw-cp-3261-update-di)
    Reading composer.json of some-company/utilities (default)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '6bd8e55151f5' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '6bd8e55151f5'
    Importing branch default (dev-default)
    Reading composer.json of some-company/utilities (rc/3.0)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'b0f39889d482' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'b0f39889d482'
    Importing branch rc/3.0 (dev-rc/3.0)
    Reading composer.json of some-company/utilities (f/202209-dc-CP-3654-update-deps)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '52431edd1c3b' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '52431edd1c3b'
    Importing branch f/202209-dc-CP-3654-update-deps (dev-f/202209-dc-CP-3654-update-deps)
    Reading composer.json of some-company/utilities (f/202209-jw-CP-4595-update-deps-and-iterable)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r 'c6c0c1567c91' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r 'c6c0c1567c91'
    Importing branch f/202209-jw-CP-4595-update-deps-and-iterable (dev-f/202209-jw-CP-4595-update-deps-and-iterable)
    Reading composer.json of some-company/utilities (f/202209-bp-cp-4598-update-di)
    Executing command (/var/www/repos/Some_Company_Utilities): hg cat -r '806a080e76ca' -- 'composer.json'
    Executing command (/var/www/repos/Some_Company_Utilities): hg log --template "{date|rfc3339date}" -r '806a080e76ca'
    Importing branch f/202209-bp-cp-4598-update-di (dev-f/202209-bp-cp-4598-update-di)
    Selected some-company/utilities (3.0.1)
    Selected some-company/utilities (3.0.0)
    Selected some-company/utilities (2.4.9)
    Selected some-company/utilities (2.4.8)
    Selected some-company/utilities (2.4.7)
    Selected some-company/utilities (2.4.6)
    Selected some-company/utilities (2.4.5)
    Selected some-company/utilities (2.4.4)
    Selected some-company/utilities (2.4.3)
    Selected some-company/utilities (2.4.2)
    Selected some-company/utilities (2.4.1)
    Selected some-company/utilities (2.4.0)
    Selected some-company/utilities (2.3.0)
    Selected some-company/utilities (2.2.11)
    Selected some-company/utilities (2.2.10)
    Selected some-company/utilities (2.2.9)
    Selected some-company/utilities (2.2.8)
    Selected some-company/utilities (2.2.7)
    Selected some-company/utilities (2.2.6)
    Selected some-company/utilities (2.2.5)
    Selected some-company/utilities (2.2.4)
    Selected some-company/utilities (2.2.3)
    Selected some-company/utilities (2.2.2)
    Selected some-company/utilities (2.2.1)
    Selected some-company/utilities (2.2.0)
    Selected some-company/utilities (2.1.3)
    Selected some-company/utilities (2.1.2)
    Selected some-company/utilities (2.1.1)
    Selected some-company/utilities (2.1.0)
    Selected some-company/utilities (2.0.2)
    Selected some-company/utilities (2.0.1)
    Selected some-company/utilities (2.0.0)
    Selected some-company/utilities (1.0.2)
    Selected some-company/utilities (1.0.1)
    Selected some-company/utilities (1.0.0)
    Selected some-company/utilities (0.2.0)
    Selected some-company/utilities (0.1.29)
    Selected some-company/utilities (0.1.28)
    Selected some-company/utilities (0.1.27)
    Selected some-company/utilities (0.1.26)
    Selected some-company/utilities (0.1.25)
    Selected some-company/utilities (0.1.24)
    Selected some-company/utilities (0.1.23)
    Selected some-company/utilities (0.1.22)
    Selected some-company/utilities (0.1.21)
    Selected some-company/utilities (0.1.20)
    Selected some-company/utilities (0.1.19)
    Selected some-company/utilities (0.1.18)
    Selected some-company/utilities (0.1.17)
    Selected some-company/utilities (0.1.15)
    Selected some-company/utilities (0.1.14)
    Selected some-company/utilities (0.1.13)
    Selected some-company/utilities (0.1.12)
    Selected some-company/utilities (0.1.11)
    Selected some-company/utilities (dev-develop)
    Selected some-company/utilities (dev-f/202201-gw-cp-3261-update-di)
    Selected some-company/utilities (dev-default)
    Selected some-company/utilities (dev-rc/3.0)
    Selected some-company/utilities (dev-f/202209-dc-CP-3654-update-deps)
    Selected some-company/utilities (dev-f/202209-jw-CP-4595-update-deps-and-iterable)
    Selected some-company/utilities (dev-f/202209-bp-cp-4598-update-di)
    The some-company/dependency-injection ^62.0 requirement did not match any package
    The some-company/interfaces ^7.0 requirement did not match any package
    The some-company/validation ^5.0 requirement did not match any package
    The guzzlehttp/guzzle ^5.0 requirement did not match any package
    The ircmaxell/password-compat ^1.0 requirement did not match any package
    The symfony/yaml ^2.1 requirement did not match any package
    The basekit/phpunit-extensions dev-master requirement did not match any package
    The mockery/mockery ^1 requirement did not match any package
    The phpunit/phpunit ^6.5 requirement did not match any package
    The some-company/dependency-injection ^61.1 requirement did not match any package
    The some-company/interfaces ^6.0 requirement did not match any package
    The some-company/validation ^4.0 requirement did not match any package
    The phpunit/phpunit ^5 requirement did not match any package
    The some-company/dependency-injection ^60.0 requirement did not match any package
    The some-company/dependency-injection 60.0 requirement did not match any package
    The some-company/dependency-injection ^57.0 requirement did not match any package
    The some-company/interfaces ^4.0 requirement did not match any package
    The some-company/validation ^3.2 requirement did not match any package
    The some-company/dependency-injection ^56.0 requirement did not match any package
    The some-company/dependency-injection ^55.0 requirement did not match any package
    The some-company/dependency-injection ^54.0 requirement did not match any package
    The some-company/dependency-injection ^53.0 requirement did not match any package
    The some-company/dependency-injection ^51.0 requirement did not match any package
    The some-company/dependency-injection ^49.0 requirement did not match any package
    The some-company/dependency-injection ^48.0 requirement did not match any package
    The some-company/dependency-injection ^47.0 requirement did not match any package
    The some-company/dependency-injection ^46.0 requirement did not match any package
    The some-company/dependency-injection ^45.0 requirement did not match any package
    The some-company/dependency-injection ^44.0 requirement did not match any package
    The some-company/validation ^3.0 requirement did not match any package
    The some-company/dependency-injection ^43.0 requirement did not match any package
    The some-company/dependency-injection ^42.0 requirement did not match any package
    The some-company/dependency-injection ^41.0 requirement did not match any package
    The some-company/dependency-injection ^40.0 requirement did not match any package
    The some-company/dependency-injection ^39.0 requirement did not match any package
    The some-company/dependency-injection ^36.0 requirement did not match any package
    The some-company/interfaces ^3.0 requirement did not match any package
    The some-company/interfaces ^2.0 requirement did not match any package
    The some-company/validation ^2.3 requirement did not match any package
    The some-company/interfaces ^1.0 requirement did not match any package
    The some-company/validation ^2.0 requirement did not match any package
    The mockery/mockery 0.9.* requirement did not match any package
    The some-company/interfaces ~0.4 requirement did not match any package
    The some-company/validation ^1.0 requirement did not match any package
    The some-company/validation ^0.5 requirement did not match any package
    The some-company/validation ~0.3 requirement did not match any package
    The some-company/interfaces ~0.2 requirement did not match any package
    The some-company/interfaces 0.2.* requirement did not match any package
    Creating local downloads in 'web//dist'
    Dumping package 'some-company/utilities' in version '2.2.5'.
    Dumping package 'some-company/utilities' in version 'dev-f/202209-bp-cp-4598-update-di'.
    Dumping package 'some-company/utilities' in version '2.2.8'.
    Dumping package 'some-company/utilities' in version '2.2.9'.
    Dumping package 'some-company/utilities' in version '0.1.28'.
    Dumping package 'some-company/utilities' in version '2.4.3'.
    Dumping package 'some-company/utilities' in version '0.1.22'.
    Dumping package 'some-company/utilities' in version '0.1.17'.
    Dumping package 'some-company/utilities' in version 'dev-default'.
    Dumping package 'some-company/utilities' in version '2.0.0'.
    Dumping package 'some-company/utilities' in version '3.0.0'.
    Dumping package 'some-company/utilities' in version '2.0.1'.
    Dumping package 'some-company/utilities' in version '2.3.0'.
    Dumping package 'some-company/utilities' in version '2.4.7'.
    Dumping package 'some-company/utilities' in version 'dev-f/202209-dc-CP-3654-update-deps'.
    Dumping package 'some-company/utilities' in version 'dev-rc/3.0'.
    Dumping package 'some-company/utilities' in version '0.1.23'.
    Dumping package 'some-company/utilities' in version '2.1.3'.
    Dumping package 'some-company/utilities' in version '2.4.9'.
    Dumping package 'some-company/utilities' in version '2.2.2'.
    Dumping package 'some-company/utilities' in version '2.4.1'.
    Dumping package 'some-company/utilities' in version '2.2.0'.
    Dumping package 'some-company/utilities' in version '2.2.3'.
    Dumping package 'some-company/utilities' in version '0.2.0'.
    Dumping package 'some-company/utilities' in version '2.2.10'.
    Dumping package 'some-company/utilities' in version '0.1.19'.
    Dumping package 'some-company/utilities' in version '2.2.6'.
    Dumping package 'some-company/utilities' in version '0.1.27'.
    Dumping package 'some-company/utilities' in version '2.4.0'.
    Dumping package 'some-company/utilities' in version '0.1.20'.
    Dumping package 'some-company/utilities' in version '0.1.21'.
    Dumping package 'some-company/utilities' in version '2.2.4'.
    Dumping package 'some-company/utilities' in version '2.0.2'.
    Dumping package 'some-company/utilities' in version '1.0.1'.
    Dumping package 'some-company/utilities' in version '2.2.1'.
    Dumping package 'some-company/utilities' in version '0.1.25'.
    Dumping package 'some-company/utilities' in version '2.2.11'.
    Dumping package 'some-company/utilities' in version '2.4.5'.
    Dumping package 'some-company/utilities' in version '3.0.1'.
    Dumping package 'some-company/utilities' in version '0.1.15'.
    Dumping package 'some-company/utilities' in version '1.0.0'.
    Dumping package 'some-company/utilities' in version 'dev-f/202209-jw-CP-4595-update-deps-and-iterable'.
    Dumping package 'some-company/utilities' in version '0.1.24'.
    Dumping package 'some-company/utilities' in version '0.1.12'.
    Dumping package 'some-company/utilities' in version '1.0.2'.
    Dumping package 'some-company/utilities' in version '0.1.13'.
    Dumping package 'some-company/utilities' in version '0.1.18'.
    Dumping package 'some-company/utilities' in version '2.1.0'.
    Dumping package 'some-company/utilities' in version 'dev-f/202201-gw-cp-3261-update-di'.
    Dumping package 'some-company/utilities' in version '2.2.7'.
    Dumping package 'some-company/utilities' in version '2.4.6'.
    Dumping package 'some-company/utilities' in version '2.4.2'.
    Dumping package 'some-company/utilities' in version 'dev-develop'.
    Dumping package 'some-company/utilities' in version '0.1.29'.
    Dumping package 'some-company/utilities' in version '2.4.8'.
    Dumping package 'some-company/utilities' in version '0.1.14'.
    Dumping package 'some-company/utilities' in version '0.1.11'.
    Dumping package 'some-company/utilities' in version '2.4.4'.
    Dumping package 'some-company/utilities' in version '2.1.1'.
    Dumping package 'some-company/utilities' in version '0.1.26'.
    Dumping package 'some-company/utilities' in version '2.1.2'.
    Dumping package 'some-company/utilities' in version '0.1.13'.
    Dumping package 'some-company/utilities' in version '2.2.6'.
    Dumping package 'some-company/utilities' in version '2.4.2'.
    Dumping package 'some-company/utilities' in version '0.1.20'.
    Dumping package 'some-company/utilities' in version 'dev-rc/3.0'.
    Dumping package 'some-company/utilities' in version '2.2.0'.
    Dumping package 'some-company/utilities' in version '2.1.3'.
    Dumping package 'some-company/utilities' in version '2.3.0'.
    Dumping package 'some-company/utilities' in version '0.1.15'.
    Dumping package 'some-company/utilities' in version '2.2.2'.
    Dumping package 'some-company/utilities' in version '1.0.1'.
    Dumping package 'some-company/utilities' in version '2.2.1'.
    Dumping package 'some-company/utilities' in version '2.2.7'.
    Dumping package 'some-company/utilities' in version '0.1.22'.
    Dumping package 'some-company/utilities' in version 'dev-default'.
    Dumping package 'some-company/utilities' in version '2.1.0'.
    Dumping package 'some-company/utilities' in version '3.0.0'.
    Dumping package 'some-company/utilities' in version '2.2.8'.
    Dumping package 'some-company/utilities' in version '2.4.8'.
    Dumping package 'some-company/utilities' in version '0.1.21'.
    Dumping package 'some-company/utilities' in version '0.1.12'.
    Dumping package 'some-company/utilities' in version '2.2.5'.
    Dumping package 'some-company/utilities' in version '2.2.9'.
    Dumping package 'some-company/utilities' in version '2.0.2'.
    Dumping package 'some-company/utilities' in version '2.0.0'.
    Dumping package 'some-company/utilities' in version '2.4.6'.
    Dumping package 'some-company/utilities' in version '0.1.27'.
    Dumping package 'some-company/utilities' in version '0.1.24'.
    Dumping package 'some-company/utilities' in version '0.1.18'.
    Dumping package 'some-company/utilities' in version '0.1.19'.
    Dumping package 'some-company/utilities' in version '0.1.14'.
    Dumping package 'some-company/utilities' in version 'dev-f/202209-dc-CP-3654-update-deps'.
    Dumping package 'some-company/utilities' in version '2.2.3'.
    Dumping package 'some-company/utilities' in version '2.4.7'.
    Dumping package 'some-company/utilities' in version '0.1.29'.
    Dumping package 'some-company/utilities' in version '2.4.4'.
    Dumping package 'some-company/utilities' in version '2.2.10'.
    Dumping package 'some-company/utilities' in version 'dev-f/202209-jw-CP-4595-update-deps-and-iterable'.
    Dumping package 'some-company/utilities' in version '0.1.23'.
    Dumping package 'some-company/utilities' in version '2.1.2'.
    Dumping package 'some-company/utilities' in version '2.1.1'.
    Dumping package 'some-company/utilities' in version '2.4.5'.
    Dumping package 'some-company/utilities' in version '0.1.28'.
    Dumping package 'some-company/utilities' in version '2.2.4'.
    Dumping package 'some-company/utilities' in version '1.0.0'.
    Dumping package 'some-company/utilities' in version '0.1.11'.
    Dumping package 'some-company/utilities' in version 'dev-f/202209-bp-cp-4598-update-di'.
    Dumping package 'some-company/utilities' in version '3.0.1'.
    Dumping package 'some-company/utilities' in version '0.1.26'.
    Dumping package 'some-company/utilities' in version '2.4.3'.
    Dumping package 'some-company/utilities' in version 'dev-f/202201-gw-cp-3261-update-di'.
    Dumping package 'some-company/utilities' in version '2.4.0'.
    Dumping package 'some-company/utilities' in version '2.4.9'.
    Dumping package 'some-company/utilities' in version '2.2.11'.
    Dumping package 'some-company/utilities' in version '0.1.17'.
    Dumping package 'some-company/utilities' in version '2.0.1'.
    Dumping package 'some-company/utilities' in version '2.4.1'.
    Dumping package 'some-company/utilities' in version '1.0.2'.
    Dumping package 'some-company/utilities' in version '0.2.0'.
    Dumping package 'some-company/utilities' in version '0.1.25'.
    Dumping package 'some-company/utilities' in version 'dev-develop'.
    Wrote packages to web//include/all$60e3d8956b954b05e7d8d4b4e39911b03c488940.json
    Wrote packages to web//p2/some-company/utilities.json
    Wrote packages to web//p2/some-company/utilities~dev.json
    Writing packages.json
    Pruning include directories
    Deleted web//include/all$fbb15b027b19a03f8d6d09cd437daf5a74bb0824.json
    Writing web view
    

    Expected behavior My expectation is that not only should my initially requested package some-company/utilities be archived in the web/dist directory, but also the packages that it depends on, such as third party package phpunit/phpunit or other private packages like some-company/dependency-injection.

    Additional context These are the various package versions I'm running at.

    Composer version 2.2.12 2022-04-13 16:42:25
    PHP 7.4.30 (cli) (built: Jul  7 2022 15:51:43) ( NTS )
    Satis 3.0.0-dev
    OS: Debian/bullseye
    

    The directory this command takes place in is /var/www/satis. I'm raising this issue for myself on behalf of a company I work for, so I'm obfuscating a few things, such as package names; any reference to the company has been replaced with 'some-company' as appropriate. Since we have a lot of packages I've reduced the scope to only be a single package, in order to keep the output down.

    bug 
    opened by Ben-Padbury 0
  • Show package information dependent on tag/branch (like Packagist does)

    Show package information dependent on tag/branch (like Packagist does)

    Is your feature request related to a problem? Please describe. We use the Satis "Required by"-info to check if old packages are unused and can be safely deleted/abandoned. Since Satis uses all repo tags and branches in order to determine the "Required by"-information, the "Required by" list just grows longer and longer (because we don't delete old releases/tags that still contain packages that have been removed in newer tags/releases).

    So even if a package is already unused in the current release of our packages, it still shows up in "Required by" because it is used in older releases. This makes the "Required by"-info useless for us, because we are only interested in the "Required by"-info for a specific (in our case the latest) tag/branch.

    Describe the solution you'd like Show the package information based on tags/branches, similar to what packagist.org does with the tag-selection:

    Bildschirmfoto 2022-09-12 um 16 51 27

    Describe alternatives you've considered The alternative is to delete old branches/tags, so that Satis will not pick up information from "composer.json"-files in old/unused tags/branches.

    This approach is cumbersome, since one always has to remember to delete old tags.

    Additional context

    I can create a PR if you (package maintainers) consider this a useful feature.

    feature 
    opened by jaylinski 0
  • RFC: Compatibility with composer/composer 2.3.x

    RFC: Compatibility with composer/composer 2.3.x

    Describe the bug I believe satis is no longer working with Composer 2.3:

    To Reproduce Try a satis build with Composer 2.3

    Outcome

    $ php satis/bin/satis build -vvv satis.json /var/jenkins_home/composer-repo
    
    In BaseCommand.php line 59:
    [RuntimeException]                                                           
    Composer commands can only work with an Composer\Console\Application instance set
    
    Exception trace:
      at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/vendor/composer/composer/src/Composer/Command/BaseCommand.php:59
     Composer\Command\BaseCommand->getApplication() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/src/Console/Command/BuildCommand.php:183
     Composer\Satis\Console\Command\BuildCommand->execute() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/vendor/symfony/console/Command/Command.php:298
     Symfony\Component\Console\Command\Command->run() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/vendor/symfony/console/Application.php:1015
     Symfony\Component\Console\Application->doRunCommand() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/vendor/symfony/console/Application.php:299
     Symfony\Component\Console\Application->doRun() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/src/Console/Application.php:49
     Composer\Satis\Console\Application->doRun() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/vendor/symfony/console/Application.php:171
     Symfony\Component\Console\Application->run() at /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/satis/bin/satis:60
    
    build [--repository-url REPOSITORY-URL] [--repository-strict] [--no-html-output] [--skip-errors] [--stats] [--minify] [--] [<file> [<output-dir> [<packages>...]]]
    

    Expected behavior

    $ php satis/bin/satis build -vvv satis.json /var/jenkins_home/composer-repo
    
    Loading config file /var/jenkins_home/jobs/XXX/jobs/satis-update/workspace/auth.json
    Checked CA file /etc/pki/tls/certs/ca-bundle.crt does not exist or it is not a file.
    Checked directory /etc/pki/tls/certs/ca-bundle.crt does not exist or it is not a directory.
    Checked CA file /etc/ssl/certs/ca-certificates.crt: valid
    Executing command (/var/jenkins_home/jobs/XXX/jobs/satis-update/workspace): git branch -a --no-color --no-abbrev -v
    Executing command (/var/jenkins_home/jobs/XXX/jobs/satis-update/workspace): git rev-list remotes/origin/master..ab5180af5811f3cd4d23691542f9be02f6556f4c
    Executing command (/var/jenkins_home/jobs/XXX/jobs/satis-update/workspace): git describe --exact-match --tags
    ...
    

    Additional context

    Before every satis build we execute a composer update inside our satis directory (the one created by composer create-project composer/satis:dev-main --stability=dev --remove-vcs). Today this updated composer:

    Updating dependencies
    Lock file operations: 0 installs, 2 updates, 0 removals
      - Upgrading composer/composer (2.2.10 => 2.3.0)
      - Upgrading composer/pcre (1.0.1 => 3.0.0)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 0 installs, 2 updates, 0 removals
      - Downloading composer/pcre (3.0.0)
      - Downloading composer/composer (2.3.0)
      - Upgrading composer/pcre (1.0.1 => 3.0.0): Extracting archive
      - Upgrading composer/composer (2.2.10 => 2.3.0): Extracting archive
    Generating autoload files
    

    After that the job failed, as is shown in the outcome section above.

    To make it work again I executed the following in the satis directory:

    composer req -W 'composer/composer:<2.3.0'

    Then the output was again like shown in expected behaviour.

    feature 
    opened by BSchwetzel 4
  • No way to respect PHP version requirements when `only-best-candidates` set to `true`

    No way to respect PHP version requirements when `only-best-candidates` set to `true`

    Is your feature request related to a problem? Please describe. It seems that there is no way to configure satis to build repository working for given PHP version if only-best-candidates is set to true.

    For example if we have an environment running PHP 7.3 and we want to use "friendsofphp/php-cs-fixer": "2.18.1", which is compatible with php: ^5.6 || ^7.0 || ^8.0, setting the flag only-best-candidates to true will cause building a repo with some of the dependencies that are compatible only with PHP 8 (for example "symfony/string": "v6.0.2").

    Then, if we try to use our satis repository in the application, composer will fail with the message: image

    I tried to set desired environment in satis.json file require section, but then building fails with the message: image

    Describe the solution you'd like There should be possibility to define desired platform requirement.

    Describe alternatives you've considered Alternatively, setting the flag only-best-candidates to true should result in including best dependency candidate for each PHP version compatible with packages defined in satis.json

    feature bug 
    opened by winiarekk 0
  • Satis does not mark all abandoned packages as such anymore

    Satis does not mark all abandoned packages as such anymore

    Describe the bug I've got multiple packages in my satis.json that are abandoned ( "abandoned": true in their composer.json). However, Satis does not mark all of them as abandoned on the generated HTML page. In my case only the alphabetically first package is correctly marked as abandoned. All other abandoned packages are shown in blue. The commit which introduced the bug is https://github.com/composer/satis/commit/b432af3aec5a0c073f81125b932b402b06692bd2.

    To Reproduce Add multiple abandoned packages to the satis.json and build it with the current version from main branch.

    Outcome Not all abandoned packages are marked as abandoned.

    Expected behavior All abandoned packages are marked as abandoned.

    bug 
    opened by halloei 1
Releases(1.0.0)
Owner
Composer
Composer
Satis-go is a web server for hosting and managing your Satis Repository for Composer Packages

Satis-go download latest Satis-go is a web server for hosting and managing your Satis Repository for Composer Packages Some Highlights: Satis-go provi

Ben Schwartz 99 Aug 1, 2022
Merge one or more additional composer.json files at Composer runtime

Composer Merge Plugin Merge multiple composer.json files at Composer runtime. Composer Merge Plugin is intended to allow easier dependency management

Wikimedia 844 Dec 5, 2022
:musical_note: Provides a composer plugin for normalizing composer.json.

composer-normalize Provides a composer plugin for normalizing composer.json. Why When it comes to formatting composer.json, you have the following opt

null 861 Jan 4, 2023
composer parallel install plugin

prestissimo (composer plugin) This is a composer 1.x plugin that downloads packages in parallel to speed up the installation process. Announcement: Co

Hiraku NAKANO 6.3k Dec 25, 2022
Check your Composer dependencies at runtime.

Composition Composition provides a lightweight and generic API, that you can use to check your environment at runtime, instead of manually go checking

Bilal Amarni 108 May 4, 2021
Patch other composer packages on install or update

patch-installer Patch other composer packages on install or update. experimental feature Usage For a patch type change the install path to vendor dire

Maik Penz 49 Apr 11, 2021
Easily parse your project's Composer configuration, and those of its dependencies, at runtime

Composed This library provides a set of utility functions designed to help you parse your project's Composer configuration, and those of its dependenc

Josh Di Fabio 50 Nov 27, 2022
A no-frills PsySH-Composer plugin

uma/composer-psysh A no-frills PsySH-Composer plugin. In a nutshell, it provides a composer psy subcommand that spawns a Psy Shell with autoload integ

Marcel Hernandez 18 May 23, 2022
Repman - PHP Repository Manager: packagist proxy and host for private packages

Repman - PHP Repository Manager Repman is a PHP repository manager. Main features: free and open source works as a proxy for packagist.org (speeds up

Repman 438 Jan 2, 2023
Private, self-hosted Composer/Satis repository with unlimited private and open-source packages and support for Git, Mercurial, and Subversion.

Private, self-hosted Composer/Satis repository with unlimited private and open-source packages and support for Git, Mercurial, and Subversion. HTTP API, HTTPs support, webhook handler, scheduled builds, Slack and HipChat integration.

Łukasz Lach 112 Nov 24, 2022
Private Packagist API Client

Private Packagist API Client Table of Contents Private Packagist API Client Table of Contents Requirements Install Basic usage of private-packagist/ap

Packagist Conductors 30 Dec 28, 2022
Private Composer registry for private PHP packages on AWS Serverless

Tug Tug is a Composer private registry for private PHP packages installable with Composer (1 and 2). The main idea of this project is to have an inter

Fxp 33 Oct 5, 2022
📦✂️📋📦 Create a mirror of packagist.org metadata for use locally with composer

?? Packagist Mirror ❤️ Recommended by packagist.org ❤️ Announcement: Composer 2 is now available! This mirror is for Composer 1; Composer 2 is very fa

Webysther Nunes 175 Dec 30, 2022
Package Repository Website - try https://packagist.com if you need your own -

Packagist Package Repository Website for Composer, see the about page on packagist.org for more. This project is not meant for re-use. It is open sour

Composer 1.6k Dec 27, 2022
Your private self hosted composer repository with user management

Devliver Your private self-hosted composer repository. Requirements Docker MariaDB/MySQL the running docker container has access to private git reposi

Nikita Loges 53 Dec 30, 2022
WordPress Packagist — manage your plugins with Composer

WordPress Packagist This is the repository for wpackagist.org which allows WordPress plugins and themes to be managed along with other dependencies us

Outlandish 648 Jan 1, 2023
Database Repository / PHP Repository / Laravel Repository

Database Repository / PHP Repository / Laravel Repository Installation Use following command to add this package to composer development requirement.

Bakery 6 Dec 21, 2022
Site-builder is a simple static site generator. It allows you to create and manage a website out of simple text files and templates.

Site-builder is a simple static site generator. It allows you to create and manage a website out of simple text files and templates. This gives you many of the advantages of a CMS, but because the result is plain old HTML, it's more secure and has higher performance.

Matt Robinson 28 May 24, 2022
PSpec is a testing framework for PHP, influenced by RSpec and jest. 🧪 This repo is a MIRROR of the GitLab source repository.

PSpec PSpec is a testing framework for PHP, influenced by RSpec and jest. This project is experimental and still needs a lot of work. Example // src/C

CodingPaws 0 Mar 31, 2022
This package provides some basic methods to implement a self updating functionality for your Laravel application. Already bundled are some methods to provide a self-update mechanism via Github or some private repository via http.

This package provides some basic methods to implement a self updating functionality for your Laravel 5 application. Already bundled are some methods to provide a self-update mechanism via Github.

Holger Lösken 311 Dec 31, 2022