Content deleted Content added
m v2.04b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation - Link equal to linktext) |
SimLibrarian (talk | contribs) m rm contraction |
||
(41 intermediate revisions by 29 users not shown) | |||
Line 1:
{{
{{See also|Repository (version control)}}
{{Cleanup list|date=March 2019}}
A '''software repository''', or
== Overview ==
Many software publishers and other organizations maintain servers on the [[Internet]] for this purpose, either free of charge or for a subscription fee. Repositories may be solely for particular programs, such as [[CPAN]] for the [[Perl]] [[programming language]], or for an entire [[operating system]]. Operators of such repositories typically provide a [[package management system]], tools intended to search for, install and otherwise manipulate software packages from the repositories. For example, many [[Linux distribution]]s use [[APT (
[[File:Zypper new repository package signing key screenshot.png|thumb|Example of a signed repository key (with [[ZYpp]] on [[openSUSE]])]]
As software repositories are designed to include useful packages, major repositories are designed to be [[malware]] free. If a computer is configured to use a [[digitally signed]] repository from a reputable vendor, and is coupled with an appropriate [[File system permissions|permissions system]], this significantly reduces the threat of malware to these systems. As a side effect, many systems that have these
Most major [[Linux distribution]]s have many repositories around the world that mirror the main repository.
In an enterprise environment, a software repository is usually used to store artifacts, or to mirror external repositories which may be inaccessible due to security restrictions. Such repositories may provide additional functionality, like access control, versioning, security checks for uploaded software, cluster functionality etc. and typically support a variety of formats in one package, so as to cater for all the needs in an enterprise, and thus aiming to provide a single point of truth. Popular examples are JFrog Artifactory<ref>{{Cite web|url=https://www.wikieduonline.com/wiki/JFrog_Artifactory|title = JFrog Artifactory - wikieduonline}}</ref><ref>{{Cite web|url=https://jfrog.com/artifactory/|title=Artifactory - Universal Artifact Management}}</ref> and Nexus repository.<ref>{{Cite web|url=https://www.sonatype.com/products/repository-pro|title=Nexus Repository | Software Component Management}}</ref>▼
At client side, a package manager helps installing from and updating the repositories.
At server side, a software repository is typically managed by source control or repository managers. Some of the repository managers allow to aggregate other repository ___location into one URL and provide a caching proxy. When doing continuous builds many artifacts are produced and often centrally stored, so automatically deleting the ones which are not released is important.▼
== Package management system vs. package development process ==
Line 22 ⟶ 18:
A [[Package manager|package management system]] is different from a [[package development process]].
A typical use of a package management system is to facilitate the integration of code from possibly different sources into a coherent stand-alone operating unit.
A package development process, by contrast, is used to manage the co-development of code and documentation of a collection of functions or routines with a common theme, producing thereby a package of software functions that typically will not be complete and usable by themselves. A good package development process will help users conform to good documentation and coding practices, integrating some level of [[unit testing]].
Line 28 ⟶ 24:
== Selected repositories ==
The following table lists a few languages with repositories for contributed software.
Very few people have the ability to test their software under multiple operating systems with different versions of the core code and with other contributed packages they may use.
To understand how this is valuable, imagine a situation with two developers, Sally and John.
This example exposes both a strength and a weakness in the R contributed-package system: CRAN supports this kind of [[automated testing]] of contributed packages, but packages contributed to CRAN need not specify the versions of other contributed packages that they use.
Beyond this, a repository such as CRAN running regular checks of contributed packages actually provides an extensive if ''ad hoc'' test suite for development versions of the core language.
{| class="wikitable"
|-
!
! [[Package
! Repository
! Install methods
Line 47 ⟶ 43:
! Autochecks
|-
| [[
| Common Architecture for Building Applications and Libraries<ref>{{Cite web|url=https://www.haskell.org/cabal/|title=The Haskell Cabal {{!}} Overview|website=www.haskell.org|access-date=2019-03-25|archive-date=2019-04-10|archive-url=https://web.archive.org/web/20190410212554/https://www.haskell.org/cabal/|url-status=live}}</ref>
| [[Hackage]]
| [[cabal (software)]]
Line 56 ⟶ 52:
| [[Java (software platform)|Java]]
|
| [[Apache Maven|Maven]]<ref>{{Cite web|url=http://maven.apache.org/|title=Maven – Welcome to Apache Maven|website=maven.apache.org|access-date=2019-03-25|archive-date=2011-07-24|archive-url=https://web.archive.org/web/20110724121908/http://maven.apache.org/|url-status=live}}</ref>
|
|
|
|-
| [[Julia (programming language)|Julia]]<ref>{{Cite web|url=https://pkg.julialang.org/|title=Julia Package Listing|website=pkg.julialang.org|access-date=2019-03-25|archive-date=2019-01-20|archive-url=https://web.archive.org/web/20190120003328/https://pkg.julialang.org/|url-status=live}}</ref>
|
|
Line 70 ⟶ 66:
| [[Common Lisp]]
|
| [[Quicklisp]]<ref>{{Cite web|url=https://www.quicklisp.org/beta/|title=Quicklisp beta|website=www.quicklisp.org|access-date=2019-03-25|archive-date=2019-03-23|archive-url=https://web.archive.org/web/20190323045928/https://www.quicklisp.org/beta/|url-status=live}}</ref>
|
|
Line 77 ⟶ 73:
| [[.NET Framework|.NET]]
| [[NuGet]]
| [[NuGet]]<ref>{{Cite web|url=https://docs.microsoft.com/en-us/nuget/tools/package-manager-ui|title=NuGet Package Manager UI Reference|last=karann-msft|website=docs.microsoft.com|language=en-us|access-date=2019-03-25|archive-date=2019-03-25|archive-url=https://web.archive.org/web/20190325170749/https://docs.microsoft.com/en-us/nuget/tools/package-manager-ui|url-status=live}}</ref>
| dotnet add package <package>
| ▼
|
|
|-
| [[Node.js]]
|node
|▼
| [[Npm (software)|npm]],<ref>{{Cite web|url=https://www.npmjs.com/|title=npm|website=www.npmjs.com|access-date=2019-03-25|archive-date=2018-04-13|archive-url=https://web.archive.org/web/20180413130005/https://www.npmjs.com/|url-status=live}}</ref> [[Yarn (package manager)|yarn]], bower
| npm install <package>
| ▼
yarn add <package>
bower install <package>
|
|
Line 92 ⟶ 91:
|
| [[CPAN]]
| [[Perl package manager|PPM]]<ref>{{Cite web|url=http://www.cpan.org/modules/INSTALL.html|title=Installing Perl Modules - www.cpan.org|website=www.cpan.org|access-date=2019-03-25|archive-date=2019-03-14|archive-url=https://web.archive.org/web/20190314104537/http://www.cpan.org/modules/INSTALL.html|url-status=live}}</ref>
|[[ActiveState]]
|▼
|
|-
Line 99 ⟶ 98:
| [[PEAR]], [[Composer (software)|Composer]]
| [[PHP Extension Community Library#PECL|PECL]], [[Packagist]]
|composer require <package>
|▼
pear install <package>
|
|
|-
| [[Python (programming language)|Python]]
| [[Setuptools]], Poetry<ref>{{Cite web|url=https://python-poetry.org|title=Poetry|website=python-poetry.org|access-date=2024-05-22|archive-date=2024-05-22|archive-url=https://web.archive.org/web/20240522033832/https://python-poetry.org/|url-status=live}}</ref>
| [[Python Package Index|PyPI]]
| [[pip (package manager)|pip]], [[EasyInstall]],
|
|
|-
| [[R (programming language)|R]]
| R CMD check process<ref>{{cite news|last=Leisch|first=Friedrich|title=Creating R Packages: A Tutorial|url=https://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf|access-date=2016-07-19|archive-date=2017-12-09|archive-url=https://web.archive.org/web/20171209065922/http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf|url-status=live}}</ref><ref>{{cite news |last1=Graves |first1=Spencer B. |last2=Dorai-Raj |first2=Sundar |title=Creating R Packages, Using CRAN, R-Forge, And Local R Archive Networks And Subversion (SVN) Repositories |url=https://cran.r-project.org/doc/contrib/Graves+DoraiRaj-RPackageDevelopment.pdf |access-date=2016-07-19 |archive-date=2017-07-05 |archive-url=https://web.archive.org/web/20170705040015/https://cran.r-project.org/doc/contrib/Graves+DoraiRaj-RPackageDevelopment.pdf |url-status=live }}</ref>
| CRAN<ref>{{Cite web|url=https://cran.r-project.org/|title=The Comprehensive R Archive Network|website=cran.r-project.org|access-date=2019-03-25|archive-date=2019-01-23|archive-url=https://web.archive.org/web/20190123091845/https://cran.r-project.org/|url-status=live}}</ref>▼
| install.packages<ref>{{Cite web|url=https://cran.r-project.org/doc/manuals/R-admin.html#Installing-packages|title=R Installation and Administration|website=cran.r-project.org|access-date=2019-03-25|archive-date=2015-11-23|archive-url=https://web.archive.org/web/20151123100435/https://cran.r-project.org/doc/manuals/R-admin.html#Installing-packages|url-status=live}}</ref><br
|[[GitHub]]<ref name=":0">{{cite
|
▲| CRAN<ref>{{Cite web|url=https://cran.r-project.org/|title=The Comprehensive R Archive Network|website=cran.r-project.org|access-date=2019-03-25}}</ref>
▲| install.packages<ref>{{Cite web|url=https://cran.r-project.org/doc/manuals/R-admin.html#Installing-packages|title=R Installation and Administration|website=cran.r-project.org|access-date=2019-03-25}}</ref><br />remotes<ref>{{cite book |last1=Wickham |first1=Hadley |last2=Bryan |first2=Jenny |title=R Packages |publisher=O'Reilly |chapter-url=https://r-pkgs.org/package-structure-state.html |chapter=Package structure and state}}</ref>
▲|[[GitHub]]<ref>{{cite journal |last1=Decan |first1=Alexandre |last2=Mens |first2=Tom |last3=Claes |first3=Maelick |last4=Grosjean |first4=Philippe |title=On the Development and Distribution of R Packages: An Empirical Analysis of the R Ecosystem |journal=Proceedings of the 2015 European Conference on Software Architecture Workshops - ECSAW '15 |date=2015 |pages=1–6 |doi=10.1145/2797433.2797476|s2cid=1680582 |url=https://zenodo.org/record/851546 }}</ref><br />
▲| Frequently on 12 platforms or combinations of different versions of R (devel, prerel, patched, release) on different operating systems (different versions of Linux, Windows, macOS, and Solaris).
|-
| [[Ruby (programming language)|Ruby]]
| [[RubyGems]]
| RubyGems<ref name="rubygems">{{cite web |title=RubyGems.org your community gem host |url=https://rubygems.org/ |website=rubygems |access-date=2022-02-03 |archive-date=2019-02-13 |archive-url=https://web.archive.org/web/20190213112335/https://rubygems.org/ |url-status=live }}</ref>
| RubyGems,<ref name="rubygems"
▲| RubyGems,<ref name="rubygems" /> Bundler<ref>{{cite web |title=Bundler: The best way to manage a Ruby application's gems |url=https://bundler.io |website=bundler.io |access-date=2022-02-03}}</ref>
|
|
|-
| [[Rust (programming language)|Rust]]
| Cargo<ref name="cargo">{{cite web |title=The Cargo Book |url=https://doc.rust-lang.org/stable/cargo/ |department=Documentation |website=Rust Programming Language |access-date=2019-08-26 |archive-date=2019-04-28 |archive-url=https://web.archive.org/web/20190428102851/https://doc.rust-lang.org/stable/cargo/ |url-status=live }}</ref>
|
| Cargo<ref name="cargo"/>
▲|
|[[Go (programming language)|Go]]
|go
|pkg.go.dev
|go get <package>
|[[GitHub]]<ref name=":0" />
▲|
|-
|[[Dart (programming language)|Dart]]
|Flutter
|pub.dev
|flutter pub get <package>
▲|
|
|-
|[[D (programming language)|D]]
|DUB
|dlang.org
|dub add <package>
|
|
Line 147 ⟶ 159:
|
|}
(Parts of this table were copied from a "List of Top Repositories by Programming Language" on [[Stack Overflow]]<ref>{{cite web|title=List of Top Repositories by Programming Language|url=https://stackoverflow.com/questions/1693529/list-of-top-repositories-by-programming-language|website=Stack Overflow|access-date=2010-04-14|archive-date=2018-12-26|archive-url=https://web.archive.org/web/20181226054147/https://stackoverflow.com/questions/1693529/list-of-top-repositories-by-programming-language|url-status=live}}</ref>)
Many other programming languages, among them [[C (programming language)|C]], [[
* [[Netlib]], mainly mathematical routines for Fortran and C, historically one of the first open software repositories;
* [[Boost (C++ libraries)|Boost]], a strictly curated collection of high-quality libraries for C++; some code developed in Boost later became part of the C++ standard library.
Line 162 ⟶ 174:
!Description
|-
|[[
|A package manager for Node.js<ref>{{Cite web|url=https://www.npmjs.com/about|title=npm About|website=www.npmjs.com|access-date=2019-11-21|archive-date=2019-11-19|archive-url=https://web.archive.org/web/20191119023601/https://www.npmjs.com/about|url-status=live}}</ref>
|-
|[[Pip (package manager)|pip]]
|A package installer for Python<ref>{{Citation|last=developers|first=The pip|title=pip: The PyPA recommended tool for installing Python packages.|url=https://pip.pypa.io/|access-date=2019-11-21|archive-date=2020-07-14|archive-url=https://web.archive.org/web/20200714190354/https://pip.pypa.io/en/stable/|url-status=live}}</ref>
|-
|[[APT (software)|apt]]
|For managing Debian Packages<ref>{{Cite web|url=https://wiki.debian.org/Apt|title=Apt - Debian Wiki|website=wiki.debian.org|access-date=2019-11-22|archive-date=2019-10-19|archive-url=https://web.archive.org/web/20191019035319/https://wiki.debian.org/Apt|url-status=live}}</ref>
|-
|[[Homebrew (package
|A package installer for MacOS that allows
|-
|[[vcpkg]]
|A package manager for [[C (programming language)|C]] and [[C++]]<ref>{{Cite web|url=https://sdtimes.com/android/yelp-launches-yelp-fusion-microsoft-creates-vcpkg-tool-new-touch-sense-sdk-android-developers-sd-times-news-digest-sept-20-2016/|title=Yelp launches Yelp Fusion, Microsoft creates Vcpkg tool, and the new Touch Sense SDK for Android developers|date=September 20, 2016|website=SD Times|access-date=November 19, 2020|archive-date=November 27, 2020|archive-url=https://web.archive.org/web/20201127025317/https://sdtimes.com/android/yelp-launches-yelp-fusion-microsoft-creates-vcpkg-tool-new-touch-sense-sdk-android-developers-sd-times-news-digest-sept-20-2016/|url-status=live}}</ref><ref>{{Cite web|url=https://sdtimes.com/msft/microsofts-c-library-manager-now-available-linux-mac-os/|title=Microsoft's C++ library manager now available for Linux and macOS|date=April 25, 2018|website=SD Times|access-date=November 19, 2020|archive-date=September 22, 2020|archive-url=https://web.archive.org/web/20200922183443/https://sdtimes.com/msft/microsofts-c-library-manager-now-available-linux-mac-os/|url-status=live}}</ref>
|-
|[[Yum (software)|yum]] and [[DNF (software)|dnf]]
|Package manager for [[Fedora
|-
|[[Pacman package manager|pacman]]
|Package manager for [[Arch Linux]]<ref>{{Cite web|title=pacman - ArchWiki|url=https://wiki.archlinux.org/index.php/pacman|access-date=2021-04-11|website=wiki.archlinux.org|archive-date=2017-08-18|archive-url=https://web.archive.org/web/20170818132159/https://wiki.archlinux.org/index.php/Pacman|url-status=live}}</ref>
|}
== Repository managers ==
▲In an enterprise environment, a software repository is usually used to store artifacts, or to mirror external repositories which may be inaccessible due to security restrictions. Such repositories may provide additional functionality, like access control, versioning, security checks for uploaded software, cluster functionality etc. and typically support a variety of formats in one package, so as to cater for all the needs in an enterprise, and thus aiming to provide a single point of truth.
▲At server side, a software repository is typically managed by source control or repository managers. Some of the repository managers allow to aggregate other repository ___location into one URL and provide a caching proxy. When doing continuous builds many artifacts are produced and often centrally stored, so automatically deleting the ones which are not released is important.
=== Relationship to continuous integration ===
Line 196 ⟶ 211:
==== Artifacts and packages ====
Artifacts and packages inherently mean different things. Artifacts are simply an output or collection of files (ex. JAR, WAR, DLLS, RPM etc.) and one of those files may contain metadata (e.g. POM file).
Compared to source files, binary artifacts are often larger by orders of magnitude, they are rarely deleted or overwritten (except for rare cases such as snapshots or nightly builds), and they are usually accompanied by much metadata such as id, package name, version, license and more.
Line 226 ⟶ 241:
== See also ==
{{Div col|colwidth=20em}}
* [[Package manager]]
* [[RPM Package Manager]]
* [[Synaptic (software)
* [[FreeBSD Ports]]
* [[Definitive
* [[dpkg]]
* [[Simtel]]
{{div col end}}
== References ==
{{Reflist|30em}}
{{Computer science}}
[[Category:Software distribution|Repository]]
|