Skip to content
Snippets Groups Projects
Unverified Commit 56f4da8f authored by Luke Bennett's avatar Luke Bennett
Browse files

Added more markup files

parent 4c7b26b0
No related branches found
No related tags found
No related merge requests found
= Creole
{{http://www.wikicreole.org/attach/LeftMenu/viki.png|Creole}}\\
Creole is a common wiki markup language intended to be used across many different wikis. Its aim is not to replace existing markup, but instead to enable wiki users to transfer basic content seamlessly across wikis, and lower the barrier to entry for novice users.
= Regular Language–Recursive Descent Parser
This text has been formatted using a //regular language–recursive descent// (RLRD) parser design. That is, rules are applied in a recursive descent that matches the ultimate XML output; at each level of the descent, a set of regular expressions define the text that each child rule can "consume". Rules are applied greedily (i.e. earliest-match first). Unlike standard markup designs, this makes edge-cases between rules explicit, and allows a parser to be certified XHTML-compliant.
The parser is written in Javascript, allowing greater flexibility in the deployment of the parser. The underlying RLRD design can be implemented in any language.
= Live Preview
This document demonstrates a live Javascript preview, using this RLRD renderer. Editing the above text area will change this text.
The markup follows the basic rules of [[http://www.wikicreole.org/wiki/Creole0.4|Creole v0.4]].
{{See also|Manual:Coding conventions/Selenium}}
{{TNT|Shortcut|CC/Ruby}}
{{TOCRight}}
This article describes the '''coding conventions''' for '''Ruby''' files of [[Manual:Code|MediaWiki]] related codebases.
Unlike Python with its [http://legacy.python.org/dev/peps/pep-0008/ PEP 8], Ruby has no truly canonical style guide to which to reference. There are, however, a few well respected guides that can serve as reference points for Rubyists, most prominently those from [https://github.com/styleguide/ruby GitHub], [http://rb-tutorial.herokuapp.com/blog/2012/01/30/ruby-style-guide/ Heroku], and the [https://github.com/bbatsov/ruby-style-guide community-driven guide from bbatsov].
== Starting point ==
For reasons both public-spirited and practical, we have adopted the [https://github.com/bbatsov/ruby-style-guide bbatsov guide] as a starting point; it's the most participatory of the three and comes with the [https://github.com/bbatsov/rubocop rubocop code analyzer] that can be easily customized and integrated into our [[Continuous_integration|continuous integration]].
== Exceptions ==
There are a handful of areas where the bbatsov guide attempts to draw the line with seemingly arbitrary limits or where there's quite a bit of disagreement among commenters. In most of these cases, we've opted to simply ignore the rules and defer in good faith to the developer.
Exceptions and additions to the [https://github.com/bbatsov/ruby-style-guide bbatsov guide] are enumerated herein.
=== Method length ===
; RuboCop ID : <code>Metrics/MethodLength</code>
; Enforced : no
In general, developers should follow the single responsibility principle, but the bbatsov guide's 10-line limit seems rather arbitrary.<ref>Single Responsibility Principle, Wikipedia [https://en.wikipedia.org/wiki/Single_responsibility_principle]</ref>
=== Line length ===
; RuboCop ID : <code>Metrics/LineLength</code>
; Enforced : yes, but at a 100 character limit
It's suggested in the bbatsov guide that lines should never exceed 80 characters in length, but there's an ongoing debate over it.<ref>The Ruby Style Guide, Source Code Layout, bbatsov [https://github.com/bbatsov/ruby-style-guide#80-character-limits]</ref><ref>The Ruby Style Guide, Issue #207 [https://github.com/bbatsov/ruby-style-guide/issues/207]</ref> In fact, statistical analysis of the ten most popular Ruby projects on GitHub shows that a limit of 80 would invalidate more than 8% of existing lines while a more liberal limit of 100 or 120 would only invalid around 3% and 1% respectively.<ref>The Ruby Style Guide, Issue #207, lee-dohm [https://github.com/bbatsov/ruby-style-guide/issues/207#issuecomment-24459812]</ref> Falling back on our own [[Manual:Coding_conventions|general coding conventions]], 100 lines will be our current limit.
=== Multi-line method chaining ===
; RuboCop ID : <code>Style/DotPosition</code>
; Enforced : per project
Two options are presented in the bbatsov guide.<ref>The Ruby Style Guide, Multi-line Method Chains, bbatsov [https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains]</ref> We allow either form as long as you stay consistent within each project.
==== OK ====
<syntaxhighlight lang="ruby">
things.map { |thing| thing.age }.
reduce { |sum, age| sum + age }
</syntaxhighlight>
==== Also OK ====
<syntaxhighlight lang="ruby">
things.map { |thing| thing.age }
.reduce { |sum, age| sum + age }
</syntaxhighlight>
=== Signaling exceptions ===
; RuboCop ID : <code>Style/SignalException</code>
; Enforced : no
The bbatsov guide suggests using <code>fail</code> to signal new exceptions and <code>raise</code> to re-raise rescued ones.<ref>The Ruby Style Guide, Fail Method, bbatsov [https://github.com/bbatsov/ruby-style-guide#fail-method]</ref> However, there's some objection to the rule based on the lack of the former in existing Ruby projects or prominent Ruby literature, and the contrived nature of useful semantic differences given as a justification.<ref>The Ruby Style Guide, Issue #233 [https://github.com/bbatsov/ruby-style-guide/issues/233]</ref> For now, we don't enforce this rule.
==== OK ====
<syntaxhighlight lang="ruby">
def foo
# ...
raise "warning!" if error_condition_one?
raise "oops. something terrible has happened" if error_condition_two?
# ...
end
begin
foo
rescue => exception
raise unless exception.message.start_with?("warning!")
end
</syntaxhighlight>
=== Aliasing methods ===
; RuboCop ID : <code>Style/Alias</code>
; Enforced : no
The bbatsov guide suggests that <code>alias_method</code> should always be used over <code>alias</code>.<ref>The Ruby Style Guide, bbatsov [https://github.com/bbatsov/ruby-style-guide#alias-method]</ref> However, there are cases where <code>alias</code> can be just as clear or even more appropriate when written alongside methods defined with <code>def</code>.<ref>The Ruby Style Guide, Issue #377 [https://github.com/bbatsov/ruby-style-guide/issues/377]</ref>
In short, it's ok to use <code>alias</code> within the body of a class or module definition to alias a method also defined therein, but it should not be used to alias methods defined by a macro; <code>alias_method</code> is more appropriate in that case since it's a macro itself.
==== Good ====
<syntaxhighlight lang="ruby">
class List
attr_reader :length
alias_method :size, :length
def fold_left(&accumulator)
# yield left to right (head to tail)
end
def fold_right(&accumulator)
# yield right to left (tail to head)
end
alias fold fold_left
end
</syntaxhighlight>
==== Bad ====
<syntaxhighlight lang="ruby">
class List
attr_reader :length
alias size length
def fold_left(&accumulator)
# yield left to right (head to tail)
end
def fold_right(&accumulator)
# yield right to left (tail to head)
end
alias_method :fold, :fold_left
end
</syntaxhighlight>
=== String literals ===
; RuboCop ID : <code>Style/StringLiterals</code>
; Enforced : per project
Either single or double quotes are acceptable defaults for string literals, as long as you stay consistent within projects. Unlike in PHP, the Ruby implementation of string literals yields identical runtime performance between the two forms.
=== Trivial attribute methods ===
; RuboCop ID : <code>Style/TrivialAccessors</code>
; Enforced : yes, but using the <code>ExactNameMatch</code> option
The bbatsov guide discourages methods that amount to simple attribute accessors, suggesting use of <code>attr</code> macros instead.<ref>The Ruby Style Guide, bbatsov [https://github.com/bbatsov/ruby-style-guide#attr_family]</ref> While the use of attribute macros is generally common practice among Ruby developers, the rule's default options don't allow for methods that expose variables of a different name.
==== Good ====
<syntaxhighlight lang="ruby">
class List
attr_reader :length
end
class List
def length
@size
end
end
</syntaxhighlight>
==== Bad ====
<syntaxhighlight lang="ruby">
class List
def length
@length
end
end
</syntaxhighlight>
== RuboCop ==
RuboCop check is enabled for MediaWiki and related repos that contain Ruby code, enforcing the conventions outlined here. In most cases, a configuration file has been initialized using the <code>--auto-gen-config</code> option; the generated config will ignore all violations by default, allowing maintainers to address them one by one.
=== Ignoring or customizing RuboCop rules ===
When you want to ignore a rule or customize its behavior, whether you're going by the recommendations in this guide or not, you'll need to add some configuration to the <code>.rubocop.yml</code> file in the project's root directory (after the <code>inherit_from:</code> entry).
For example, to ignore the <code>Metrics/LineLength</code> rule altogether, you'd add the following.
<syntaxhighlight lang="yaml">
Metrics/LineLength:
Enable: false
</syntaxhighlight>
To customize it to using a more liberal line length limit, say 120, you'd add this.
<syntaxhighlight lang="yaml">
Metrics/LineLength:
Max: 120
</syntaxhighlight>
Please consult the [https://github.com/bbatsov/rubocop#configuration RuboCop documentation] for possible rule names and options.
=== Base configuration ===
Following is a RuboCop configuration that reflects the exceptions above. Please use it as a starting point for your Ruby projects.
<syntaxhighlight lang="yaml">
AllCops:
# Only enforce rules that have an entry in the style guide
StyleGuideCopsOnly: true
Metrics/LineLength:
Max: 100
Metrics/MethodLength:
Enabled: false
Style/Alias:
Enabled: false
Style/SignalException:
Enabled: false
# Pick one and stay consistent
Style/StringLiterals:
EnforcedStyle: single_quotes
# EnforcedStyle: double_quotes
Style/TrivialAccessors:
ExactNameMatch: true
</syntaxhighlight>
== References ==
<references />
{{TNT|Conventions navigation}}
[[Category:Ruby{{translation}}]]
#+TITLE: Bestowed Example
#+description: Using emacs orgmode
#+AUTHOR: Rob Rohan @robrohan
#+DATE: Jan 20, 2016
# C+c C+e # default
#+OPTIONS: html-link-use-abs-url:nil html-postamble:auto
#+OPTIONS: html-preamble:t html-scripts:nil html-style:nil
#+OPTIONS: html5-fancy:nil tex:t
#+CREATOR: <a href="http://www.gnu.org/software/emacs/">Emacs</a> 24.4.1 (<a href="http://orgmode.org">Org</a> mode 8.2.10)
#+HTML_CONTAINER: div
#+HTML_DOCTYPE: <!doctype html>
#+HTML_HEAD: <meta name="bestowed-theme" value="themes/default"><script async src="http://s3.amazonaws.com/cdn.robrohan.com/bestowed/bestowed.min.js"></script>
#+HTML_HEAD_EXTRA:
#+HTML_LINK_HOME:
#+HTML_LINK_UP:
#+HTML_MATHJAX:
#+INFOJS_OPT:
#+LATEX_HEADER:
* Bestowed
#+BEGIN_HTML
<div style="font-size: 3em; width: 100%; text-align: center;">🎁</div>
#+END_HTML
Bestowed is a simple Javascript library that can be added to an Org-Mode file in order to create presentations.
- Uses CSS for styling
- Created using emacs' org-mode and it's default HTML export
- Nothing to install, just need to add a setting to the org-mode export
- Bestowed has simple navigation:
- Next Slide: Space bar, j, down arrow, or right arrow
- Previous Slide: Delete, k, up arrow, or left arrow
Go to the next slide...
* Using emacs Org-Mode for Presentations
Here are some benefits of using Bestowed
- Works with your normal workflow (if you're stuck in the 70s like me)
- Can have presenations right next to the code
- You can store presos in:
- _git_
- _svn_
- *whatever*
Go to the next slide...
* How It Works
You can add bestowed to any org-mode file by doing the following:
- There is nothing to install into emacs
- At the top of the org-mode file type: _C+c C+e #_ then type 'html'
- Edit the inserted headers with the following:
#+BEGIN_SRC
...
#+OPTIONS: html-preamble:t html-scripts:nil html-style:nil
...
#+HTML_DOCTYPE: <!doctype html>
#+HTML_HEAD: <meta name="bestowed-theme" value="themes/none"><script type="text/javascript" src="../build/bestowed.min.js"></script>
...
#+END_SRC
- Export org-mode as HTML with _C+c C+e h h_
- View the exported HTML file with your browser
* Showing Code
Bestowed can show basic code blocks by adding BEGIN SRC and END SRC sections.
It looks like this:
#+BEGIN_SRC sh
docker ps
ls -alFh
rm -rf /
#+END_SRC
- In org-mode, type _<s_ and then press _tab_
- Or start a block with BEGIN SRC and end with END SRC
* Raw HTML
Since Bestowed is very basic, if you need to do some fancy HTML you can always insert a raw block of HTML.
- Type _<h_ and press _tab_
- Or start a block with BEGIN HTML and end with END HTML
- Example:
#+BEGIN_HTML
<div style="width: 100%; text-align: center">
<iframe width="420" height="315" src="https://www.youtube.com/embed/gGO4RPzAKQY" frameborder="0" allowfullscreen></iframe>
</div>
#+END_HTML
* Images And Links
You can include images in two ways:
- By using the raw HTML block (from the last slide)
- Or using the standard Org-mode way: typing [ [ image path ] ]
- Images can (obviously) be located online or other sites
#+ATTR_HTML: class="center"
[[http://www.seedkitchen.com/wp-content/uploads/2014/09/vegan0.jpg]]
- Links are almost the same as images: [ [ http:// ] [ display text ] ]
* Tables
You can use standard org-mode tables too.
| One | Two | Three | Four |
|-----+-------+-------+-------|
| Red | Green | Blue | Alpha |
| 一 | 二 | 三 | 四 |
|-----+-------+-------+-------|
* Quotes
To do a quotes:
- Type _<q_ and press _tab_
- Or use BEGIN QUOTE and END QUOTE
#+BEGIN_QUOTE
To err is human, but to really foul things up requires adherence to the Google interview process. --Almost Everyone
#+END_QUOTE
* Themes
This is the default theme. You can use other themes by adding the theme path to the org-mode file.
In the export section, add the theme path in the /bestowed-theme/ meta tag:
#+BEGIN_SRC
...
#+HTML_HEAD: <meta name="bestowed-theme" value="themes/default"><script type="text/javascript" src="../build/bestowed.min.js"></script>
...
#+END_SRC
You can put a full URL into /bestowed-theme/ value to load a theme. If the value doesn't start with _http_ then bestowed will look relative to the bestowed Javascript file.
* Thank You
#+BEGIN_HTML
<div style="font-size: 3em; width: 100%; text-align: center;">🎁</div>
#+END_HTML
Thank you for checking out Bestowed. I hope you find it useful and fun. You can contact me [[https://twitter.com/robrohan][on twitter]] if you like.
# C-c C-e h h
# * Style guide based on Rails documention
module Namespace #:nodoc: don't document this
# Generic Namespace exception class
class NamespaceError < StandardError
end
# Raised when...
class SpecificError < NamespaceError
end
# Document the responsibility of the class
#
# == Heading
#
# Use headings to break up descriptions
#
# == Formatting
#
# Embody +parameters+ or +options+ in Teletype Text tags. You can also use
# *bold* or *italics* but must use HTML tags for <b>multiple words</b>,
# <i>like this</i> and <tt>like this</tt>.
class Base
# RDOC documents constants as well
MAX_NUMBER_OF_BOOKINGS = 3
# Write comments above for accessors, this will be presented as [R/W]
attr_accessor :first_name
# However this one will be presented as [R]
attr_reader :name
def initialize(string) #:notnew: stops RDoc from seeing the initialize method as the new method
end
# Desribe the behaviour of the method
#
# ==== Attributes
#
# * +remove_string+ - Document the first attribute
# * +append_string+ - Document the second attribute
# * +options+ - Document the third attribute
#
# ==== Options
#
# You may which to break out options as a separate item since there maybe
# multiple items. Note options are prefixed with a colon, denoting them
# as a
#
# * +:conditions+ - An SQL fragment like "administrator = 1"
# * +:order+ - An SQL fragment like "created_at DESC, name".
# * +:group+ - An attribute name by which the result should be grouped
# * +:limit+ - An integer determining the limit on the number of rows that should be returned.
# * +:offset+ - An integer determining the offset from where the rows should be fetched.
# * +:joins+ - Either an SQL fragment for additional joins like "LEFT JOIN comments ON comments.post_id = id" (rarely needed)
#
# ==== Examples
#
# Illustrate the behaviour of the method using examples. Indent examples:
#
# base = Base.new("Example String")
# base.method_name("Example", "more")
def method_name(remove_string, append_string, options)
end
end
end
# Examples from Active Record
module ActiveRecord #:nodoc:
# Generic Active Record exception class.
class ActiveRecordError < StandardError
end
# Raised when the single-table inheritance mechanism failes to locate the subclass
# (for example due to improper usage of column that +inheritance_column+ points to).
class SubclassNotFound < ActiveRecordError #:nodoc:
end
class Base
# A generic "counter updater" implementation, intended primarily to be
# used by increment_counter and decrement_counter, but which may also
# be useful on its own. It simply does a direct SQL update for the record
# with the given ID, altering the given hash of counters by the amount
# given by the corresponding value:
#
# ==== Attributes
#
# * +id+ - The id of the object you wish to update a counter on.
# * +counters+ - An Array of Hashes containing the names of the fields
# to update as keys and the amount to update the field by as values.
#
# ==== Examples
#
# # For the Post with id of 5, decrement the comment_count by 1, and
# # increment the action_count by 1
# Post.update_counters 5, :comment_count => -1, :action_count => 1
# # Executes the following SQL:
# # UPDATE posts
# # SET comment_count = comment_count - 1,
# # action_count = action_count + 1
# # WHERE id = 5
def update_counters(id, counters)
updates = counters.inject([]) { |list, (counter_name, increment)|
sign = increment < 0 ? "-" : "+"
list << "#{connection.quote_column_name(counter_name)} = #{connection.quote_column_name(counter_name)} #{sign} #{increment.abs}"
}.join(", ")
update_all(updates, "#{connection.quote_column_name(primary_key)} = #{quote_value(id)}")
end
end
end
\ No newline at end of file
=========================================
ReStructuredText (rst): plain text markup
=========================================
.. sectnum::
.. contents:: The tiny table of contents
What is reStructuredText?
~~~~~~~~~~~~~~~~~~~~~~~~~
An easy-to-read, what-you-see-is-what-you-get plaintext markup syntax
and parser system, abbreviated *rst*. In other words, using a simple
text editor, documents can be created which
- are easy to read in text editor and
- can be *automatically* converted to
- html and
- latex (and therefore pdf)
What is it good for?
~~~~~~~~~~~~~~~~~~~~
reStructuredText can be used, for example, to
- write technical documentation (so that it can easily be offered as a
pdf file or a web page)
- create html webpages without knowing html
- to document source code
Show me some formatting examples
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can highlight text in *italics* or, to provide even more emphasis
in **bold**. Often, when describing computer code, we like to use a
``fixed space font`` to quote code snippets.
We can also include footnotes [1]_. We could include source code files
(by specifying their name) which is useful when documenting code. We
can also copy source code verbatim (i.e. include it in the rst
document) like this::
int main ( int argc, char *argv[] ) {
printf("Hello World\n");
return 0;
}
We have already seen at itemised list in section `What is it good
for?`_. Enumerated list and descriptive lists are supported as
well. It provides very good support for including html-links in a
variety of ways. Any section and subsections defined can be linked to,
as well.
Where can I learn more?
~~~~~~~~~~~~~~~~~~~~~~~
reStructuredText is described at
http://docutils.sourceforge.net/rst.html. We provide some geeky small
print in this footnote [2]_.
Show me some more stuff, please
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We can also include figures:
.. figure:: image.png
:width: 300pt
The magnetisation in a small ferromagnetic disk. The diametre is of the order of 120 nanometers and the material is Ni20Fe80. Png is a file format that is both acceptable for html pages as well as for (pdf)latex.
---------------------------------------------------------------------------
.. [1] although there isn't much point of using a footnote here.
.. [2] Random facts:
- Emacs provides an rst mode
- when converting rst to html, a style sheet can be provided (there is a similar feature for latex)
- rst can also be converted into XML
- the recommended file extension for rst is ``.txt``
Bold Text
*this is bold*
===========================
Italic text
_this is italic_
===========================
Links
"link text(title tooltip)":linkAddress
Example - "Assistly(Assistly's website)":http://www.assistly.com
===========================
Email Links
"link text(title tooltip)":mailto:someone@example.com
Example - "Support(Assistly Support)":mailto:support@assistly.com
===========================
Images
Example - !http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Pygoscelis_papua.jpg/250px-Pygoscelis_papua.jpg(Hi)!
===========================
Lists
--Unordered
* An item in a bulleted list
** Second Level
*** Third level
--Ordered
# First list item
# Second list item
## Second level list item
===========================
Bullets usage examples
* I am a bullet
*# I am a numbered list in second level
*# I am another numbered list in second level
* I am another bullet in first level
===========================
Headings
You must leave a blank line after each heading.
h1. First heading
h2. Second heading
h3. Third heading
h4. Fourth heading
h5. Fifth heading
h6. Sixth heading
===========================
Code
@your code goes in here@
Note: There can't be empty lines in the block of code.
===========================
Blockquotes
bq. This text will be enclosed in an HTML blockquote element.
===========================
More markers
*_bold italic text_*
-strikethrough text-
*-bold strikethrough text-*
*_-bold italic strikethrough text-_*
+underlined text+
*+bold underlined text+*
_+italic underlined text+_
*_+bold italic underlined text+_*
*_-+bold italic strikethrough underlined text+-_*
{{primary sources|date=December 2016}}
{{prose|date=January 2017}}
{{Infobox website
| name = GitLab
| logo = GitLab logo.png
| screenshot = gitlab_screenshot_december_2015.png
| caption =
| url = {{URL|https://gitlab.com}}
| slogan = "Tools for modern developers"
| commercial = Yes
| type = [[Git (software)|Git]] repository hosting service <br /> Collaborative revision control
| registration = Optional
| language = [[English language|English]]
| owner = GitLab Inc.
| author =
| alexa = {{increase}} 2,973 ({{as of|2016|12|16|alt=Dec 2016}})<ref>{{cite web|url=http://www.alexa.com/siteinfo/gitlab.com |title=GitLab.com Alexa Ranking | publisher=Alexa Internet|accessdate=Dec 16, 2016}}</ref>
| key_people = {{plainlist|
* [[Sid Sijbrandij]] ([[CEO]])
* [[Dmitriy Zaporozhets]] ([[Chief_technology_officer|CTO]])
}}
| founder = {{plainlist|
* [[Sid Sijbrandij]]
* [[Dmitriy Zaporozhets]]
* [[Valery Sizov]]
}}
| num users =
| content_license = [[open source software|Open-source]], [[commercial software|Commercial]]
| num_employees = 150<ref>{{cite web|url=https://about.gitlab.com/team/|title=GitLab Team}}</ref>
| area served = [[World]]wide
| industry = [[Software]]
| programming_language = [[Ruby_(programming_language)|Ruby]] and [[Go_(programming_language)|Go]]
| launch date = {{start date and age|2011}}
| current status = Online
}}
'''GitLab''' is a web-based [[Git (software)|Git]] repository manager with [[wiki]] and [[Issue_tracking_system|issue tracking]] features, using an [[Open-source_software|open source]] license, developed by GitLab Inc. The software was written by [[Dmitriy Zaporozhets]] and [[Valery Sizov]] from [[Ukraine]]. The code is written in [[Ruby (programming language)|Ruby]]. Later, some parts have been rewritten in [[Go_(programming_language)|Go]]. As of December 2016, the company has 150 team members<ref>{{cite web|title=GitLab Team Page|url=https://about.gitlab.com/team/|website=GitLab|accessdate=17 Dec 2016}}</ref> and more than 1400 [[Open-source_software|open source]] contributors.<ref>{{cite web|title=GitLab Contributors|url=http://contributors.gitlab.com|website=GitLab.com|accessdate=17 Dec 2016}}</ref> It is used by organisations such as [[IBM]], [[Sony]], [[Jülich Research Center]], [[NASA]], [[Alibaba Group|Alibaba]], [[Invincea]], [[O’Reilly Media]], [[Leibniz-Rechenzentrum|Leibniz-Rechenzentrum (LRZ)]] and [[CERN]].<ref>{{cite web|url=http://thenextweb.com/insider/2014/06/04/github-rival-gitlab-building-business-just-0-1-paying-customers/|title=GitLab is building a business with 0.1% of paying customers|author=Andrii Degeler|date=4 June 2014|work=The Next Web}}</ref><ref>{{cite web|url=http://information-technology.web.cern.ch/services/cern-commercial|title=Services - CERN or commercial provider?|author=CERN|work=cern.ch}}</ref><ref>{{cite web|url=https://www.lrz.de/services/netzdienste/gitlab_en/|title=Services - GitLab}}</ref>
==History==
* Originally, the product was named GitLab and was fully [[free and open source software]] distributed under the [[MIT License]].<ref>{{cite web|url=http://thenextweb.com/apps/2011/10/13/ship-it-faster-and-cheaper-gitlab-is-github-for-your-own-servers/|title=Ship it faster and cheaper - GitLab is GitHub for your own servers - The Next Web|author=Drew Olanoff|date=13 October 2011|work=The Next Web}}</ref>
* In July 2013,<ref>{{cite web|url=https://about.gitlab.com/2013/07/22/announcing-gitlab-enterprise-edition/|title=GitLab - Announcing GitLab 6.0 Enterprise Edition|work=gitlab.com}}</ref> the product was split:
** GitLab CE: Community Edition
** GitLab EE: Enterprise Edition <br> At that time, the license of GitLab CE and GitLab EE remained free and open source software distributed under the MIT License.
* In February 2014, GitLab announced<ref>{{cite web|url=https://about.gitlab.com/2014/02/11/gitlab-ee-license-change/|title=GitLab - GitLab Enterprise Edition license change|work=gitlab.com}}</ref> adoption of an [[open core]] business model. GitLab EE is set under a proprietary license, and contains features not present in the CE version.<ref>{{cite web|url=https://about.gitlab.com/features/#compare|title=GitLab - Features|work=gitlab.com}}</ref>
* In July 2015, the company raised an additional $1.5 million in [[seed funding]].<ref name=raises>{{cite web|first=Jordan|last=Novet|url=http://venturebeat.com/2015/07/09/y-combinator-backed-github-competitor-gitlab-raises-1-5m/|title=Y Combinator-backed GitHub competitor GitLab raises $1.5M|work=VentureBeat}}</ref> Customers as of 2015 included [[Alibaba Group]], [[IBM]], and [[SpaceX]].<ref name=raises/>
* In September 2015, GitLab raised $4 million in Series A funding from [[Khosla Ventures]].<ref>{{Cite web|title = GitLab Raises $4M Series A Round From Khosla Ventures|url = https://techcrunch.com/2015/09/17/gitlab-raises-4m-series-a-round-from-khosla-ventures-for-its-open-source-collaboration-platform|website = TechCrunch|accessdate = 17 Dec 2016}}</ref>
* In July 2016, the GitLab CEO confirmed the [[open core]] feature of the company.<ref>https://about.gitlab.com/2016/07/14/building-an-open-source-company-interview-with-gitlabs-ceo/</ref>
* In September 2016, GitLab raised $20 million in Series B funding from [[August Capital]] and others.<ref>{{Cite web|url=http://social.techcrunch.com/2016/09/13/gitlab-secures-20-million-series-b/|title=GitLab secures $20 million Series B|last=Miller|first=Ron|website=TechCrunch|access-date= 3 Nov 2016}}</ref>
* In January 2017, a database administrator accidentally deleted the production database. 6 hours worth of issue and merge request data was lost.<ref>{{Cite web|url=https://about.gitlab.com/2017/02/01/gitlab-dot-com-database-incident|title=GitLab.com Database Incident|access-date= 1 Feb 2017}}</ref>
* On March 15, 2017, GitLab announced the acquisition of [[Gitter]]. Included in the announcement was the stated intent that Gitter would continue as a standalone project. Additionally, GitLab announced that the code would become open source under an MIT License no later than June 2017.<ref>{{Cite web|url=https://about.gitlab.com/2017/03/15/gitter-acquisition/|title=Gitter is joining the GitLab team|website=GitLab|access-date=2017-03-15}}</ref>
== See also ==
* [[Comparison of source code hosting facilities]]
* [https://botleg.com/stories/setup-gitlab-for-docker-based-development/ Setup Gitlab for Docker based development]
==References==
{{reflist|30em}}
==External links==
{{commons category|GitLab}}
*{{Official website}}
{{YC companies}}
[[Category:Bug and issue tracking software]]
[[Category:Collaborative projects]]
[[Category:Community websites]]
[[Category:Computing websites]]
[[Category:Cross-platform free software]]
[[Category:Free project management software]]
[[Category:Project hosting websites]]
[[Category:Version control]]
[[Category:Technology companies of the Netherlands]]
[[Category:Open-source software hosting facilities]]
[[Category:Free software programmed in Ruby]]
[[Category:Software using the MIT license]]
[[Category:Y Combinator companies]]
[[Category:Continuous integration]]<!-- see https://about.gitlab.com/gitlab-ci/ -->
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment