<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Private Packagist - Medium]]></title>
        <description><![CDATA[The Composer package archive as a service for PHP: Private Packagist makes installing your code with Composer faster, more reliable and more convenient than any alternative. - Medium]]></description>
        <link>https://medium.com/packagist?source=rss----5aaa6ba7ea40---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Private Packagist - Medium</title>
            <link>https://medium.com/packagist?source=rss----5aaa6ba7ea40---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 31 Dec 2017 05:34:37 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/packagist" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Tagged a new release for Composer and it won’t show up on Packagist?]]></title>
            <link>https://medium.com/packagist/tagged-a-new-release-for-composer-and-it-wont-show-up-on-packagist-org-or-on-private-packagist-efaf21c212ff?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/efaf21c212ff</guid>
            <category><![CDATA[composer]]></category>
            <category><![CDATA[dependencies]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[git]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Tue, 17 Oct 2017 00:20:03 GMT</pubDate>
            <atom:updated>2017-11-28T21:35:36.043Z</atom:updated>
            <content:encoded><![CDATA[<p>This is probably the most common support question we see both on <a href="https://packagist.org">Packagist.org</a> and on <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=versions">Private Packagist</a>: A Composer user tags a new library version but they cannot install it because it won’t show up on Packagist.</p><p><strong>Packagist will not list versions and branches containing invalid composer.json files</strong> because Composer users will not be able to install these versions. If this happened to a package you maintain, <strong>tag a new release</strong> with a fixed composer.json. Don’t edit or replace the existing git tag because many tools and services have caches that expect tags to never change.</p><p>If you run into this problem and you aren’t sure what’s wrong then there a few things you can do to figure out what’s going on:</p><h4>Run “composer validate” in your project</h4><p>The <a href="https://getcomposer.org/doc/03-cli.md#validate">validate command</a> will analyze your composer.json file and list errors as well as warnings and recommendations for publishing your package. You’ll be able to spot JSON syntax errors, but also issues with the contents of your package definition. The output of this command could look like the following example:</p><pre><strong>~/projects/private-test2$ </strong>composer.phar validate                                                                                                                            <br>./composer.json is valid for simple usage with composer but has                                                                                                                                                     <br>strict errors that make it unable to be published as a package:                                                                                                                                                     <br>See https://getcomposer.org/doc/04-schema.md for details on the schema                                                                                                                                              <br>description : The property description is required                                                                                                                                                                  <br>Name &quot;seld/PRivate-test2&quot; does not match the best practice (e.g. lower-cased/with-dashes). We suggest using &quot;seld/p-rivate-test2&quot; instead. As such you will not be able to submit it to Packagist.                  <br>The version field is present, it is recommended to leave it out if the package is published on Packagist.</pre><h4>Check the Update Log</h4><p>Private Packagist has a link to a package’s update log on the view package page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vz2jTTLApNbGUHgis5j6Ww.png" /><figcaption>Follow the View Log link to see why a version may be missing</figcaption></figure><p>The update log will highlight any errors or warnings encountered while updating the package information.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vy1Tqtkjs2cicLrayxI1xw.png" /></figure><h3>Delete the version attribute from composer.json</h3><p>Both of the previous examples show you the <strong>most common reason for missing releases: A package containing a hardcoded version number in the JSON file </strong>which does not match the git tag.</p><p>Usually the version attribute gets added to a composer.json early on in a project and everything works fine. But sooner or later someone tags a new release and forgets to increment the version number in composer.json. When Composer now looks at the Git repository it cannot tell whether the tag (1.3.0 in my example) or the version attribute in composer.json (1.2.0 in my example) is the right number. Either option may lead to problems down the road so Composer entirely ignores the broken tag.</p><p>The fix is quite simple, <strong>delete the version attribute from your composer.json</strong>. Composer has great integration with version control systems like Git, Mercurial and Subversion and there is<strong> no need to manually track version numbers</strong> in a text file for Composer at all. The field really only exists for special situations where a version control system is not in use.</p><h4>Interested in your own Composer repository? Head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=trial&amp;utm_content=versions">https://packagist.com </a>to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=efaf21c212ff" width="1" height="1"><hr><p><a href="https://medium.com/packagist/tagged-a-new-release-for-composer-and-it-wont-show-up-on-packagist-org-or-on-private-packagist-efaf21c212ff">Tagged a new release for Composer and it won’t show up on Packagist?</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Custom Package Definitions]]></title>
            <link>https://medium.com/packagist/custom-package-definitions-3f433629861e?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/3f433629861e</guid>
            <category><![CDATA[git]]></category>
            <category><![CDATA[versioning]]></category>
            <category><![CDATA[composer]]></category>
            <category><![CDATA[php]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Tue, 28 Nov 2017 20:42:15 GMT</pubDate>
            <atom:updated>2017-11-28T21:34:44.380Z</atom:updated>
            <content:encoded><![CDATA[<h4>Using code distributed in zip files with Composer</h4><p>Would you like to use a piece of code in your project which is only available for download as a zip file but you’re managing dependencies with Composer? There are a few options to consider: the <strong>package repository</strong> type, creating your own <strong>Git repository to track the zip file</strong>’s state or the <strong>artifact repository</strong> type.</p><p>They all have their own pros and cons and it’s not widely understood how managing multiple versions and updating works with these, so this article aims to give you an overview of the options and which ones to pick in which situation. <strong>Scroll to the bottom for a quick summary of pros &amp; cons.</strong></p><h3>The Package Repository</h3><p>Composer recognizes a special type of repository: <a href="https://getcomposer.org/doc/05-repositories.md#package-2">package</a>. A package repository lets you define all the information usually retrieved from packagist.org, a VCS repository and the package’s composer.json. This is the only approach which is designed to work even if the zip file does not contain a composer.json file.</p><pre>&quot;repositories&quot;: [<br>    {<br>        &quot;type&quot;: &quot;package&quot;,<br>        &quot;package&quot;: {<br>            &quot;name&quot;: &quot;old-school/magic&quot;,<br>            &quot;version&quot;: &quot;1.2.3&quot;,<br>            &quot;dist&quot;: {<br>                &quot;url&quot;: &quot;https://old-school-php.com/magic.zip&quot;,<br>                &quot;type&quot;: &quot;zip&quot;<br>            },<br>            &quot;autoload&quot;: {<br>                &quot;classmap&quot;: [&quot;libs/&quot;]<br>            }<br>        }<br>    }<br>],<br>&quot;require&quot;: {<br>    &quot;old-school/magic&quot;: &quot;1.2.*&quot;<br>}</pre><p>You’ll recognize the options from composer.json like <em>name</em> or <em>autoload</em> but you’ll also have to define <em>dist</em> and optionally <em>source </em>to tell Composer where to download the code from. This is usually added automatically by Packagist or in the case of a VCS repository the repository URL itself is the <em>source</em>.</p><p>If you are using <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=custom-package"><strong>Private Packagist</strong></a><strong> </strong>you can use the same JSON syntax to define a package using the “Add Package -&gt; <strong>Custom Package</strong>” option. This way you don’t have to add anything to your composer.json, the package will be available in your Composer repository at https://repo.packagist.com/your-org/ like all other packages!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sxGw0XLL9Mvn4YGDtEYpUA.png" /><figcaption>Editing a custom Package in Private Packagist</figcaption></figure><h4>Multiple package versions in a package repository</h4><p>The package-type repository allows you to specify multiple packages, or multiple versions of the same package. Simply turn the package definition into an array.</p><p>This is particularly useful if you use the same repository definition in multiple projects which may need different versions of your zip file. In Private Packagist this is the way to make sure multiple versions of your custom package show up in the Composer repository you use for all your projects.</p><pre>&quot;repositories&quot;: [<br>    {<br>        &quot;type&quot;: &quot;package&quot;,<br>        &quot;package&quot;: [{<br>                &quot;name&quot;: &quot;old-school/magic&quot;,<br>                &quot;version&quot;: &quot;1.2.3&quot;,<br>                &quot;dist&quot;: {<br>                    &quot;url&quot;: &quot;https://old-school-php.com/magic.zip&quot;,<br>                    &quot;type&quot;: &quot;zip&quot;<br>                }<br>            },{<br>                &quot;name&quot;: &quot;old-school/magic&quot;,<br>                &quot;version&quot;: &quot;1.2.4&quot;,<br>                &quot;dist&quot;: {<br>                    &quot;url&quot;: &quot;https://old-school-php.com/magic4.zip&quot;,<br>                    &quot;type&quot;: &quot;zip&quot;<br>                }<br>            }<br>        ]<br>    }<br>],<br>&quot;require&quot;: {<br>    &quot;old-school/magic&quot;: &quot;1.2.*&quot;<br>}</pre><h3>Tracking the Zip Contents in a Git Repository</h3><p>Instead of adding the metadata for the package to your project’s composer.json you can create a Git repository and commit the contents of the unzipped archive you are trying to use. If the zip file already contains a composer.json just tag the contents with the version number (make sure it matches the number in composer.json, or better yet, delete the version from composer.json). If your zip file came without a composer.json create one yourself.</p><pre>unzip magic.zip<br>cd magic<br>git init .<br>git remote add origin <a href="https://github.com/your-org/old-school-magic">https://github.com/your-org/old-school-magic</a><br># create/edit composer.json here if needed<br>git add --all<br>git commit<br>git tag 1.2.3<br>git push --tags origin</pre><p>Using this approach it’s easier to reuse the file in multiple places because you only have to add the <a href="https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository">VCS repository</a> URL to each project where you’re trying to use the zip file contents. With Private Packagist this Git repository will automatically show up as a package in all your projects using synchronization.</p><pre>&quot;repositories&quot;: [<br>    {<br>        &quot;type&quot;: &quot;vcs&quot;,<br>        &quot;url&quot;: &quot;https://github.com/your-org/old-school-magic&quot;<br>    }<br>],<br>&quot;require&quot;: {<br>    &quot;old-school/magic&quot;: &quot;1.2.*&quot;<br>}</pre><h4>Adding a new version of the zip file to the tracking Git repository</h4><p>If a new version of the zip file becomes available you can update the contents of the repository and tag the new release. If it doesn’t come with a composer.json make sure to update it as necessary. You need to take special care in this step to ensure deleted files will actually be deleted from your Git repository.</p><pre>cd magic<br>rm -r *<br>unzip ../magic4.zip<br># restore/edit composer.json here if needed<br>git add --all<br>git commit<br>git tag 1.2.4<br>git push origin</pre><p>Now you can run composer update on any project using the code and it’ll update its dependency on old-school/magic to the latest version 1.2.4.</p><h3>The Artifact Repository</h3><p>If your zip file contains a composer.json you have another alternative available to you: the <a href="https://getcomposer.org/doc/05-repositories.md#artifact">artifact repository type</a> (Of course you could also repackage your zip file to include a composer.json). The artifact repository let’s you specify a local path to a directory containing any number of zip files. Composer will load metadata from composer.json files in all of the zip files. So you can easily store many different packages and versions of these packages in a directory.</p><pre>&quot;repositories&quot;: [<br>    {<br>        &quot;type&quot;: &quot;artifact&quot;,<br>        &quot;url&quot;: &quot;/srv/artifacts/composer/&quot;<br>    }<br>],<br>&quot;require&quot;: {<br>    &quot;old-school/magic&quot;: &quot;1.2.*&quot;<br>}</pre><p>If you wish to share this project or work on it together however you need to make sure everyone can access the zip files. So you’ll have to either mount a shared filesystem for these artifacts, come up with a distribution mechanism yourself, or actually commit all the zip files into a directory in your project so the artifact repository points to a relative path in your project.</p><h3>Summary</h3><h4><strong>Repository type: artifact</strong></h4><p><strong>Pro<br>- </strong>Only one repository entry in composer.json for many packages<br><strong>Con<br>- </strong>Requires composer.json in zip files<br>- Zip files need to be on local path on every machine or you have to commit all zip files into project repository which is not really an option if used in multiple projects</p><h4><strong>Repository type: package</strong></h4><p><strong>Pro<br>- </strong>Zip file can be used without modification<br><strong>Con<br>- </strong>Metadata is copied into every project’s composer.json<br>- New version requires change in every composer.json referencing the package<br>- Does not use data in composer.json if zip file already contains one</p><h4>Custom Package on Private Packagist</h4><p><strong>Pro</strong><br>- Configuration like package repository type<strong><br></strong>- Use zip file without modification<br>- No copying of metadata, no composer.json changes needed<br>- Single location to update for a new version — even with many projects<br><strong>Con<br></strong>- Does not use data in composer.json if zip file already contains one</p><h4><strong>Git repository to track zip contents</strong></h4><p><strong>Pro<br>- </strong>Git tools (e.g. diff, log) can be used to view history of the package<br>- Only short VCS repository entry in every composer.json using the package (Not needed if you use Private Packagist)<br><strong>Con<br>- </strong>Complex process to update the Git repo every time a new version is released<br>- Potentially lots of Git repositories to manage if you use many zip files</p><h4>Head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=trial&amp;utm_content=custom-package">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3f433629861e" width="1" height="1"><hr><p><a href="https://medium.com/packagist/custom-package-definitions-3f433629861e">Custom Package Definitions</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Private Packagist Enterprise]]></title>
            <link>https://medium.com/packagist/private-packagist-enterprise-a54033b3c025?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/a54033b3c025</guid>
            <category><![CDATA[gitlab]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[bitbucket]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[composer]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Tue, 29 Aug 2017 12:37:53 GMT</pubDate>
            <atom:updated>2017-11-28T21:43:38.405Z</atom:updated>
            <content:encoded><![CDATA[<h4>Integrations with GitHub Enterprise, Bitbucket Server / Stash and self-hosted GitLab</h4><p>When we first launched Private Packagist on <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=enterprise">packagist.com</a> it started as a SaaS offer promising an extremely fast setup and effortless maintenance. We chose to launch Private Packagist as a hosted solution first because Toran Proxy was already available to Composer users for local installation. But our plan had always been to replace Toran Proxy with a <strong>much improved on-premises version of Private Packagist</strong>. So beginning in March we started offering Private Packagist Enterprise for installation on your own infrastructure.</p><p>With Private Packagist Enterprise you get <strong>full control over the infrastructure</strong> Private Packagist is running on. Most notably this means that you can run it <strong>inside your VPN behind your firewall</strong> allowing it to interact with your protected source control management systems, e.g. GitHub Enterprise, Bitbucket Server / Stash or self-hosted GitLab.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*d_152AST0uFG14O-Ci1D8A.png" /><figcaption>Replicated Management Dashboard for Private Packagist Enterprise</figcaption></figure><p>With the help of <a href="https://www.replicated.com/">Replicated</a> we can offer companies a similarly hassle-free setup and maintenance experience as on our cloud platform. All you need is a linux box matching our specs and you can run the Replicated daemon which will take care of setting up the application and allows you to manage Private Packagist through a web based management dashboard. You can create regular snapshots, update the application with a click and easily restore the application from a backup.</p><h3>From Synchronization to Integration</h3><p>At the end of February this year we <a href="https://medium.com/packagist/bitbucket-gitlab-integration-7ca010137e1f">launched</a> our synchronization feature with Bitbucket and GitLab after only supporting GitHub for the first 3 months. It enables you to keep users, permissions and packages in sync with your private code storage reducing the configuration overhead compared to tools like Satis considerably. Automatically configured webhooks further streamline working with Composer packages.</p><p>In the meantime we’ve expanded this synchronization feature for Private Packagist Enterprise. You can set up an integration with <strong>GitHub Enterprise, Bitbucket Server / Stash or self-hosted GitLab</strong> in addition to their public services. This allows your users to authenticate through these services without the need for additional passwords or permission settings. They automatically gain Composer access to the same code they have access to on your source code management system.</p><h4>Integration Setup Guides</h4><p>Since the configuration of these integrations and required OAuth credentials can be a little overwhelming we just published a set of installation guides with plenty of screenshots for these services in our <a href="https://packagist.com/docs/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=enterprise">documentation</a>:</p><ul><li><a href="https://packagist.com/docs/enterprise/github-integration-setup?utm_source=blog&amp;utm_medium=blog&amp;utm_content=enterprise">GitHub (Enterprise) Integration Setup Guide</a></li><li><a href="https://packagist.com/docs/enterprise/bitbucket-integration-setup?utm_source=blog&amp;utm_medium=blog&amp;utm_content=enterprise">Bitbucket Integration Setup Guide</a></li><li><a href="https://packagist.com/docs/enterprise/bitbucket-server-integration-setup?utm_source=blog&amp;utm_medium=blog&amp;utm_content=enterprise">Bitbucket Server (Stash) Integration Setup Guide</a></li><li><a href="https://packagist.com/docs/enterprise/gitlab-integration-setup?utm_source=blog&amp;utm_medium=blog&amp;utm_content=enterprise">GitLab Integration Setup Guide</a></li></ul><h4>Head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=trial&amp;utm_content=enterprise">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a54033b3c025" width="1" height="1"><hr><p><a href="https://medium.com/packagist/private-packagist-enterprise-a54033b3c025">Private Packagist Enterprise</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Meet us at a conference near you!]]></title>
            <link>https://medium.com/packagist/meet-us-at-a-conference-near-you-cd2a88422f78?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/cd2a88422f78</guid>
            <category><![CDATA[php]]></category>
            <category><![CDATA[conference]]></category>
            <category><![CDATA[composer]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Wed, 24 May 2017 11:10:09 GMT</pubDate>
            <atom:updated>2017-05-24T17:24:37.792Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EWTabw64WoYk2JeGeLrukA.png" /></figure><p>We will be attending a number of conferences over the next months and hope to meet you there! If you’re already using Private Packagist we would love to hear your feedback! If you aren’t using Private Packagist yet, stop by to get a live demo and to get all your questions answered in person! Make sure to say hello to <a href="https://twitter.com/seldaek">Jordi</a> and <a href="https://twitter.com/naderman">me</a> and pick up some of our stickers!</p><p><em>May 27–28</em> Belgrade, Serbia: <strong>PHP Srbija Conference</strong><br><em>June 9–10</em> Portsmouth, UK: <strong>PHP South Coast</strong><br><em>June 15–16</em> Potsdam, Germany: <strong>Contao Konferenz</strong><br><em>June 24</em> Odessa Ukraine: <strong>Odessa PHP Conference</strong><br><em>June 29-July 1</em> Amsterdam, Netherlands: <strong>Dutch PHP Conference</strong><br><em>July 13–16</em> Malmö, Sweden: <strong>Typo3 Developer Days</strong><br><em>July 25–26</em> New York City, USA: <strong>Laracon</strong></p><h4>Head over to <a href="https://packagist.com">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cd2a88422f78" width="1" height="1"><hr><p><a href="https://medium.com/packagist/meet-us-at-a-conference-near-you-cd2a88422f78">Meet us at a conference near you!</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Bitbucket & GitLab Integration]]></title>
            <link>https://medium.com/packagist/bitbucket-gitlab-integration-7ca010137e1f?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/7ca010137e1f</guid>
            <category><![CDATA[php]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[composer]]></category>
            <category><![CDATA[gitlab]]></category>
            <category><![CDATA[bitbucket]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Mon, 06 Mar 2017 15:45:16 GMT</pubDate>
            <atom:updated>2017-03-06T15:45:16.872Z</atom:updated>
            <content:encoded><![CDATA[<h4>Synchronization of Users, Teams, Permissions and repositories</h4><p>When we launched <a href="https://packagist.com">Private Packagist</a> in December of 2016, it included the minimum feature set we deemed necessary to make it a valuable product to our first customers. But due to <strong>Composer’s broad support</strong> for version control systems, code hosting platforms and authentication protocols, this meant <strong>Private Packagist was immediately compatible with all the same systems and platforms</strong>, namely Git, Mercurial or Subversion using SSH access, HTTP Basic Auth over SSL, or their native protocols.</p><p>To simplify the initial setup and maintenance of a Private Packagist account, we launched with optional synchronization for GitHub organizations. This <strong>integration keeps teams, their members, and access permissions in sync</strong> with a matching GitHub organization. So you only need to manage users and permissions in a single place.</p><h4><strong>Synchronization is now available for Bitbucket and GitLab users!</strong></h4><p>Please give it a try and send us your feedback, we’d love to better understand if it helps or how it could be made even more useful for you specifically.</p><p>As of last week, you can use your <strong>Bitbucket.org or GitLab.com</strong> user accounts<strong> to log into Private Packagist</strong> at <a href="https://packagist.com">packagist.com</a>. If you already have an account you can connect these services to your existing account on your <a href="https://packagist.com/profile/">profile page</a>.</p><p>You can then either <strong>create a new organization directly synchronized from a Bitbucket Team or a GitLab Group</strong>, or you can enable synchronization for an existing Organization in <em>Settings.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VbcRVtwyRwBS6S3Gxyiqxg.png" /></figure><p>Apart from synchronizing teams, users, and permissions, setting up the integration will simplify the addition of new packages to your Composer repository. When you create a <strong>new repository</strong> on Bitbucket or GitLab it will be<strong> added as a Composer package automatically</strong> if it contains a <em>composer.json </em>file. If you’d like to add existing repositories as packages, you can do so with the click of a button on the <em>Packages</em> tab in your organization.</p><p><strong>Update web hooks </strong>notifying Packagist of new code pushes will be installed in the background, and <strong>credentials to access the package</strong> will be <strong>configured automatically</strong>.</p><h4>Head over to <a href="https://packagist.com">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7ca010137e1f" width="1" height="1"><hr><p><a href="https://medium.com/packagist/bitbucket-gitlab-integration-7ca010137e1f">Bitbucket &amp; GitLab Integration</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mirroring Composer Packages]]></title>
            <link>https://medium.com/packagist/mirroring-composer-packages-c0012bb577e6?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/c0012bb577e6</guid>
            <category><![CDATA[composer]]></category>
            <category><![CDATA[package-management]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[mirroring]]></category>
            <category><![CDATA[dependencies]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Thu, 19 Jan 2017 16:21:39 GMT</pubDate>
            <atom:updated>2017-11-28T21:40:20.634Z</atom:updated>
            <content:encoded><![CDATA[<h4>Redundancy and Dependency Integrity with <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=mirroring">Private Packagist</a></h4><p>When you first run Composer, you usually install some open-source dependencies from its default package archive <a href="https://packagist.org">packagist.org</a>. Packagist.org is the public repository for all open-source PHP packages. So when you add an open-source dependency to your project Composer fetches its metadata, its description, a list of versions, requirements, etc., from Packagist.org.</p><h3>Installing packages from Packagist.org</h3><p><strong>Packagist.org only collects and serves package metadata</strong>. Most importantly the names of packages, their respective dependencies and the location of their source code. Once Composer resolved the set of dependencies it writes out the <em>composer.lock </em>file containing all metadata for versions of packages that need to be installed. Composer then downloads every package listed in <em>composer.lock</em>. For each package <strong>Composer</strong> either <strong>downloads</strong> a <strong>distribution file</strong> (zip or tar) or <strong>clones</strong> the respective <strong>version control system</strong> (git, hg or svn) <strong>defined by the package maintainer</strong>. By default it selects a distribution file for every tagged release, you can modify Composer’s preference with the “--prefer-source” and “--prefer-dist” options.</p><p>This means that <strong>installing open-source packages from Packagist.org relies on the respective package maintainers’ source code hosting to be up and running whenever you run <em>composer install</em></strong>. Most of the time that’s GitHub but it may be any other service or even hosted by the package maintainer themselves. Packagist.org doesn’t handle building archives, storing or distributing the package source code.</p><h3>Removing the single point of failure for installs</h3><p>When using Composer with <a href="https://packagist.com"><strong>Private Packagist</strong></a>, <strong>Composer will store two download locations</strong> for every package in your <em>composer.lock</em>: the Private Packagist mirror URL and the original download URL. Composer will download the Private Packagist mirror of distribution files which gives you <strong>faster downloads</strong>. But more importantly <strong>even if GitHub, Bitbucket, GitLab or an open-source maintainers self-hosted version control system are down, <em>composer install </em>can still install your dependencies!</strong> So if you rely on <em>composer install </em>in your build process it no longer depends on these services being available. But better yet, since Composer stores both URLs this <strong>protects you from any Private Packagist downtime too</strong>! There is <strong>no longer any single point of failure</strong>.</p><p>Further, mirroring gives you a copy of all dependencies your production system requires, so even<strong> if an open-source maintainer deletes their project</strong> you can safely switch to a new package at your own pace, because <strong>Composer can still install it</strong> from your Private Packagist repository until you remove it, too.</p><h3>Mirrored Repositories on Private Packagist</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/895/1*rtTstfcAFADYTL3hZ_J8iw.png" /></figure><p>When you create a new organization on Private Packagist, it is <strong>automatically set up to mirror</strong> all your dependencies from the open-source package archive <strong>Packagist.org</strong>. But you can mirror any number of public or private repositories, e.g. the Drupal package repository or Magento Marketplace (see “<a href="https://medium.com/packagist/mirroring-magento-marketplace-packages-in-private-packagist-d2b9a012640e#.vz7vu254m">Mirroring Magento Marketplace Packages</a>”).</p><p>By default packages are automatically mirrored and added to your Private Packagist repository the first time they are accessed through <em>composer update</em>. Automated systems using Private Packagist access tokens cannot mirror new packages to ensure that build processes do not have unintended consequences.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/961/1*xTLdTw0w96J6rWsUQpvJGA.png" /></figure><p>You can configure the mirroring policy on a per-repository basis. For example you can ensure new open-source dependencies are discussed or reviewed before they are manually added by an administrator, making them available to all developers in the organization.</p><h4>Head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=trial&amp;utm_content=mirroring">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c0012bb577e6" width="1" height="1"><hr><p><a href="https://medium.com/packagist/mirroring-composer-packages-c0012bb577e6">Mirroring Composer Packages</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mirroring Magento Marketplace Packages in Private Packagist]]></title>
            <link>https://medium.com/packagist/mirroring-magento-marketplace-packages-in-private-packagist-d2b9a012640e?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/d2b9a012640e</guid>
            <category><![CDATA[php]]></category>
            <category><![CDATA[magento]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Wed, 11 Jan 2017 16:21:35 GMT</pubDate>
            <atom:updated>2017-11-28T21:37:01.310Z</atom:updated>
            <content:encoded><![CDATA[<p>As of today Private Packagist supports mirroring Composer repositories which require authentication. This expands on the mirroring functionality we were already providing for Packagist.org and other open Composer repositories like Drupal’s or Wordpress’.</p><p>Mirrored packages show up in your Private Packagist search results, your <a href="https://medium.com/packagist/private-packagist-license-review-dc4e0c1db6ba">License Review</a>, and can be installed from your Private Packagist repository with Composer. Their distribution files are cached in your Private Packagist organization to make downloads redundant and faster.</p><p>To setup credentials for a repository, “Magento Marketplace” in our example, head to Settings &gt; Manage Credentials in your Private Packagist organization. Afterwards you can add a new mirrored third party repository under Settings as well. From then on packages can be manually or automatically mirrored based on your configuration.</p><h4>Head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=trial&amp;utm_content=mirror-magento">https://packagist.com</a> to try Private Packagist for free!</h4><h3>Magento Marketplace Walkthrough</h3><p>In the following section I’ll show you every step of mirroring packages from Magento Marketplace. Start by hitting “Manage Credentials” in your organizations settings. My organization is called “Magento-Demo”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Wk6Z8XHk_6jD6zHHy_UUhA.png" /></figure><p>Next enter a description, I’m going with “Magento Marketplace Credentials”, and select “Magento Marketplace” as the authentication type. The domain “repo.magento.com” will be filled in automatically. Now we need the Magento Marketplace Public and Private Key, we’ll click on “My Access Keys” to get to the Magento Marketplace website.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KboscVQ0YMBPGTqdUB001g.png" /></figure><p>Make sure you’re on the Magento 2 Access Keys page, and then copy and paste the Private and Public keys into the respective fields on Private Packagist. Once you’re done, hit “Create” on the Private Packagist Credentials page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yrulGOzJBgQEG3FOmoEFuA.png" /></figure><p>With the credentials set up we can now mirror a new Composer repository under Settings in the Private Packagist organization.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pgMyTJBwRt5pa2zlLfF4UQ.png" /></figure><p>Pick a name for the repository, I picked “Magento Marketplace”, enter the URL “https://repo.magento.com” and pick the credentials we just set up for authentication with this repository. You can choose whether you would like packages to be mirrored automatically when someone tries to access them through composer update, or if you would like to add them yourself manually.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wU4FNib0Gh8NrAlW2rzUtw.png" /></figure><p>Under Packages we can now add a package “From Mirror”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Sg_JbyQmliXjQS06hwyYEA.png" /></figure><p>I’m going to enter just one package for the demo, but you can add as many as you like here. I’m going with “magento/module-catalog”. Make sure to select the “Magento Marketplace” Mirror repository underneath, and hit “Add”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Dq_LrASvRoBwfe4NqGz-oQ.png" /></figure><p>Private Packagist downloads the package metadata in the background and then notifies us that the package has been initialized, and it’s now accessible through composer update &amp; composer install and shows up on package searches in Private Packagist!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*54zoQndRypYDdQlRHfnv9g.png" /></figure><h4>Head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=trial&amp;utm_content=mirror-magento">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d2b9a012640e" width="1" height="1"><hr><p><a href="https://medium.com/packagist/mirroring-magento-marketplace-packages-in-private-packagist-d2b9a012640e">Mirroring Magento Marketplace Packages in Private Packagist</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Private Packagist License Review]]></title>
            <link>https://medium.com/packagist/private-packagist-license-review-dc4e0c1db6ba?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/dc4e0c1db6ba</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[licensing]]></category>
            <category><![CDATA[composerphp]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[license]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Tue, 10 Jan 2017 11:15:39 GMT</pubDate>
            <atom:updated>2017-01-10T11:15:39.048Z</atom:updated>
            <content:encoded><![CDATA[<p>We’re excited to announce the availability of a new feature for Private Package that will help you understand and manage your dependencies better: License Review.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oBGD6uCwq633TefjUudo3A.png" /><figcaption>License Review for the phpBB organization on Private Packagist</figcaption></figure><h3>Open-source Licenses</h3><p>Open-source licenses come in a <strong>lot of flavours</strong> like weak and strong <strong>copyleft</strong> or <strong>permissive</strong> software licenses. In addition to the <strong>great benefit</strong> of being able to reuse code, open-source licenses present <strong>some challenges to businesses</strong>. With a complex project making use of open-source frameworks and libraries you will have to determine which open-source licenses allow you to incorporate which work into your own. This depends on the type of product you are building, whether you are providing a service or shipping code to customers, and the license you pick yourself.</p><p>The <a href="https://opensource.org/"><strong>Open Source Initiative</strong></a> is a great resource to learn more about open-source licenses. They have implemented a review process for open-source licenses so it becomes easier to determine whether a given software license is an open-source license at all.</p><h3>SPDX: Standardized Open-Source License identifiers</h3><p>The <a href="https://spdx.org/"><strong>Software Package Data Exchange</strong></a><strong> (SPDX) </strong>curates a list of license identifiers that enable automation around licenses in complex systems made up of large numbers of components. Composer makes use of this list with its <a href="https://packagist.org/packages/composer/spdx-licenses">composer/spdx-licenses</a> library. Composer warns you if the license in your composer.json “license” key cannot be identified using this library. <strong>If you maintain any open-source package, please review your composer.json and ensure that you are using a valid SPDX license identifier</strong> to help your users manage their dependencies.</p><p>Based on the SPDX identifiers Private Packagist License Review provides a list of all open-source licenses used by packages in your package repository. You can browse packages by license, and see if the licenses for a package changed over time.</p><p>If you know of or find packages using Private Packagist License Review, which do not use an SPDX identifier, please get in touch with the maintainers or simply send them a pull-request. Often it’s simply a matter of slightly modifying the identifier. By the way, if your package is <strong>dual licensed</strong>, please specify an <strong>array of licenses</strong> in your composer.json instead of hardcoding the word “or” into the string to help automated systems understand your licensing.</p><h3>Private Packagist License Management Roadmap</h3><p>This is merely the first tool to help you manage the licenses of your dependencies. We’re planning to expand on this functionality by allowing you to define a set of open-source licenses, to allow or reject for new packages, in order to prevent your developers from accidentally requiring packages with an incompatible license. Once we implement notifications, we’ll make you aware of new licenses that you should review when they are first added to your repository.</p><h4>Head over to <a href="https://packagist.com">https://packagist.com</a> to try Private Packagist for free!</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dc4e0c1db6ba" width="1" height="1"><hr><p><a href="https://medium.com/packagist/private-packagist-license-review-dc4e0c1db6ba">Private Packagist License Review</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing Private Packagist]]></title>
            <link>https://medium.com/packagist/introducing-private-packagist-492553d10660?source=rss----5aaa6ba7ea40---4</link>
            <guid isPermaLink="false">https://medium.com/p/492553d10660</guid>
            <category><![CDATA[php]]></category>
            <category><![CDATA[dependencies]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[version-control]]></category>
            <dc:creator><![CDATA[Nils Adermann]]></dc:creator>
            <pubDate>Thu, 15 Dec 2016 15:59:28 GMT</pubDate>
            <atom:updated>2017-11-28T21:38:54.424Z</atom:updated>
            <content:encoded><![CDATA[<p>We are extremely excited to announce our newest product addition to PHP dependency management: <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=introducing"><strong>Private Packagist</strong></a>. A service designed to help businesses of any size use Composer more effectively and with greater confidence.</p><h4>Composer Is An Open-Source Success</h4><p><a href="https://twitter.com/seldaek">Jordi</a> and I created <a href="https://getcomposer.org">Composer</a> over 5 years ago and it has taken the PHP community by storm. Over 600 people have contributed directly to improvements of the dependency management tool for PHP and <a href="https://packagist.org/statistics">billions</a> of packages have been installed with it.</p><p>Together with Composer we launched <a href="https://packagist.org">Packagist.org</a> in 2011 to host all open-source PHP packages. Packagist.org has seen tremendous growth every day since: We currently serve over 120,000 packages for a combined total of 690,000 published package versions.</p><h4>But The Composer Story For Business Has Been Rocky So Far</h4><p>The few options available to businesses with private source code who would like to use Composer, all have major limitations and are not very convenient to setup or operate.</p><ul><li><strong>Inline VCS/Git repositories </strong>in your <em>composer.json</em> files significantly slow down every composer update and are hard to maintain across projects</li><li><strong>Satis</strong> provides the <strong>bare minimum</strong> functionality to access private source code from Composer, but requires <strong>manual setup</strong> and <strong>significant work to operate reliably</strong>.</li><li><strong>Toran Proxy</strong> has a simpler setup process and supports caching open-source package archives but <strong>doesn’t provide permission management and can’t integrate easily with other products</strong>. Toran Proxy still needs to be maintained by customers’ own staff.</li></ul><h4>Private Packagist Addresses Businesses’ Composer Needs</h4><p>Private Packagist aims to remove all these hurdles for businesses to finally make working with Composer as convenient as it should be. Being a hosted service, setting up your own Composer package repository on Private Packagist is done with a few clicks. No matter if your <strong>private source code is hosted on GitHub, GitLab, Bitbucket, any of their on-premise solutions, or in any other Git, Mercurial, or Subversion repository</strong>, Private Packagist can immediately access your code after setting up your credentials to make it available for installation through Composer.</p><p>Private Packagist also helps businesses better manage and understand their open-source dependencies. Private Packagist already <strong>caches all open-source libraries used in your business’s projects</strong> and makes them and their metadata (e.g. their license) visible in your private package repository. We will be adding more features to help you better understand risks and analyze the open-source dependencies your business relies on. Further you <strong>can restrict the addition of open-source dependencies</strong> so you can thoroughly review projects before they are available for use by your developers.</p><p>Private Packagist limits your Composer repository to only those packages actually used within your business which<strong> improves the performance of composer operations</strong>, increasing your developers productivity. Your packages are available redundantly on Private Packagist and their version control system, so that <strong>composer install still works</strong> for your developers, continuous integration and deployments even <strong>if any individual service is unavailable</strong>.</p><p>Per-user authentication tokens as well as tokens for continuous integration and deployment systems ensure that you can <strong>grant and revoke access without a major headache</strong>. Fine grained permission management through teams ensures that you can provide teams in your company access to only those packages they would have access to in your version control system. If you’re using GitHub we can <strong>fully synchronize team memberships and package access</strong> without any manual interaction.</p><h4>The Road Forward</h4><p>With our newest contribution to the striving PHP ecosystem we hope to further improve the PHP developer experience. The maintenance of our open-source projects is a joy but also a burden and we hope Private Packagist can play a key part in supporting our open-source efforts. We are going to provide businesses with functionality matching their unique needs and simultaneously provide them with an opportunity to make the PHP open-source ecosystem more sustainable.</p><p>So please, head over to <a href="https://packagist.com/?utm_source=blog&amp;utm_medium=blog&amp;utm_content=introducing">Packagist.com</a> and try out Private Packagist. Please send us your feedback or any questions you have either here or via email to <a href="mailto:contact@packagist.com">contact@packagist.com</a>. We rely on your input to turn Private Packagist into the perfect fit for your needs.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=492553d10660" width="1" height="1"><hr><p><a href="https://medium.com/packagist/introducing-private-packagist-492553d10660">Introducing Private Packagist</a> was originally published in <a href="https://medium.com/packagist">Private Packagist</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>