features:
  top:
    - name: GitLab Code Quality
      available_in: [starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/project/merge_requests/code_quality_diff.html'
      image_url: '/images/9_3/code_climate.png'
      description: |
        It's hard to overstate the importance of proper code review. When reviewing changes, you will
        need to pay attention to code quality, implementation, formatting, etc. Even with amazing reviewers,
        consistency is impossible without the ability to measure quality.

        To speed up code review and to give you the ability to check, measure and improve code quality,
        we've built GitLab Code Quality. Code Quality will check your code and report changes in quality
        directly in merge requests. This means your code reviews are faster and you guarantee that you're not
        accumulating technical debt. Of course, if the quality of your code goes down,
        we will show you exactly where, so you can improve your code before merging.

# PRIMARY FEATURES
  primary:
    - name: Multi-Project Pipeline Graphs
      available_in: [premium]
      documentation_link: 'https://docs.gitlab.com/ee/ci/pipelines.html#multi-project-pipelines-graphs'
      image_url: '/images/9_3/multi-project_pipelines.png'
      description: |
        Larger projects, especially those adopting [microservices architecture](/blog/2016/08/16/trends-in-version-control-land-microservices/),
        often have a set of interdependent components that form the complete product.
        It may be difficult for a developer to follow all the links between interconnected projects and understand why a specific pipeline has run,
        or if another project has been rebuild because of a commit in the current one.

        GitLab 9.3 is now able to display links for upstream and downstream projects directly on the pipeline graph,
        so developers can check the overall status of the entire chain in one single view.
        From now on, connections between different projects are clear and simple to follow, and they're automatically created with no extra effort
        when using `$CI_JOB_TOKEN` variable with triggers.

    - name: Conversational Development Index
      available_in: [core, starter, premium]
      gitlab_com: false
      documentation_link: 'https://docs.gitlab.com/ee/user/admin_area/monitoring/convdev.html'
      image_url: '/images/9_3/conversational_development_index.png'
      description: |
        [Last September we announced](/blog/2016/09/14/gitlab-live-event-recap/)
        [Conversational Development (ConvDev)](http://conversationaldevelopment.com),
        an evolution of software methodology that accelerates your development lifecycle,
        from idea to production. By fully using GitLab's integrated platform of features,
        you can reduce that end-to-end cycle time.

        With GitLab 9.3, we are shipping the ConvDev
        Index to measure that feature usage. The ConvDev Index even compares your usage
        with other top-performers using GitLab, helping you identify which parts of your
        workflow you can further improve.

        In this first iteration, the metrics are only available to GitLab
        system administrators, aggregating data across your entire GitLab
        instance amongst active users.

    - name: Protected Variables for Enhanced Pipelines Security
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/ci/variables/#protected-secret-variables'
      documentation_text: "Read through the documentation on Protected Secret Variables"
      image_url: '/images/9_3/protected_variables.png'
      description: |
        Secret variables are very useful if you want to avoid external people to
        access private information for your project, but users that are able to modify the
        project could still get access to it.
        This might cause unintended people to affect production environments even if
        they have no write permissions to the `master` branch.

        In GitLab 9.3, **Protected Variables** introduce an **additional layer of security**
        to your sensitive information, such as deploy credentials.
        You can now mark a variable as "protected" when defining it in `Settings` -> `CI/CD Pipelines`, making it available only to jobs running on
        protected branches, therefore only authorized users can get access to it.

    - name: Centralized Audit Log
      available_in: [premium]
      gitlab_com: false
      documentation_link: 'https://docs.gitlab.com/ee/administration/audit_events.html#audit-log-admin-only'
      documentation_text: "Read through the documentation on Audit Logs"
      image_url: '/images/9_3/audit_log.png'
      description: |
        Many companies have the need for audit and compliance across the
        entire development cycle. In GitLab 9.3 any system administrator has
        access to an improved, centralized Audit Log that includes all audit
        events from Groups, Projects, and user actions.

        The centralized Audit Log also includes the ability to filter events by
        type and name, so you can easily track down events by group, project or user.

    - name: Repository Settings Made Simple
      available_in: [core, starter, premium]
      image_url: '/images/9_3/repository-settings.png'
      description: |
        Over time, the number of settings in GitLab has expanded as we've
        extended functionality and configuration options for projects and
        groups.

        In GitLab 9.3 we will [start to simplify the settings pages](https://gitlab.com/gitlab-org/gitlab-ce/issues/28451)
        by making the [Repository Settings](https://gitlab.com/gitlab-org/gitlab-ce/issues/30378)
        page a lot more readable.

        Settings will be better grouped and allow people to see an overview of
        all the settings available for a certain section.

# SECONDARY FEATURES
  secondary:
    - name: JIRA Settings Improvements
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/project/integrations/jira.html'
      documentation_text: "Read through the documentation on JIRA integration"
      image_url: '/images/9_3/jira_settings_improvements.png'
      description: |
        For JIRA users, we improved the JIRA integration settings in this release,
        making it easier to set up and test your connection from your GitLab project
        to a JIRA server instance. There is now also a separate Web URL field and
        a JIRA API URL. This is useful for when your JIRA instance is configured
        such that the JIRA REST API and the JIRA issues location do not share the
        same URL.

    - name: Snippet Descriptions
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/snippets.html'
      documentation_text: "Read through the documentation on GitLab Snippets"
      image_url: '/images/9_3/snippet_descriptions.png'
      description: |
        Snippets now have descriptions. This follows personal snippet comments, which
        were added in the [previous release](https://about.gitlab.com/blog/2017/05/22/gitlab-9-2-released/).
        Snippets are a great tool for quick and informal collaboration around code
        ideas. We're now bringing the power of issues and merge request collaboration
        to snippets too.

    - name: Group Label Permissions
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/permissions.html'
      documentation_text: "Read through the documentation on GitLab's permission model"
      description: |
        The Reporter, Developer, Master, and Owner roles can now **create and edit**
        group labels. Previously, only Master and Owner roles could do this. This
        brings parity with permissions of project labels.

    - name: Performance Improvements
      available_in: [core, starter, premium]
      description: |
        We are continuing to make great strides improving the performance of
        GitLab in every release. Not only will this make individual instances
        of GitLab even faster, but will also greatly improve the performance
        of GitLab.com, an instance that has over 1 million users!

        In GitLab 9.3 we are continuing to make listing projects a lot faster
        and improving performance overall server performance by making changes
        to how we mirror repositories. Syntax highlighting on files will also
        be cached to improve overall performance and make viewing commits
        noticeably faster.

        There are [numerous other performance enhancements](https://gitlab.com/groups/gitlab-org/issues?scope=all&state=opened&utf8=%E2%9C%93&milestone_title=9.3&label_name%5B%5D=performance)
        in GitLab 9.3 that should not only make GitLab feel faster, but reduce
        overall impact on server infrastructure.

    - name: "Edit Issue Description Inline, Without Losing Context"
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/project/issues/index.html'
      documentation_text: "Read through the documentation on GitLab Issues"
      image_url: '/images/9_3/issue_description_inline_edit.png'
      description: |
        The issue description serves as the single source of truth when teams
        collaborate on work and ideas are rapidly flowing in the issue comment
        thread. With this release, you now edit the issue description by clicking
        `Edit`, as before. But you remain on the same page, instead of going to a
        separate web form. Just make your changes inline, and click `Save changes`
        to persist the updates without refreshing the page. While editing, you can
        also easily scroll down on the page to review comments and even copy [GFM text](https://docs.gitlab.com/ee/user/markdown.html)
        and paste it back into the description.

    - name: "Bulk-Editing Issues Re-Design"
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/project/issues/index.html'
      documentation_text: "Read through the documentation on GitLab Issues"
      image_url: '/images/9_3/bulk_issue_edit_re_design.png'
      description: |
        We've made bulk editing issues even simpler and more intuitive in
        this latest release. We've leveraged the sidebar paradigm that already
        pervades GitLab. So users will feel right at home using a transient
        sidebar when updating multiple issues at once.

    - name: Issue Board Usability Improvements
      available_in: [core, starter, premium]
      webpage_url: '/product/issueboard/'
      documentation_text: "Learn more about GitLab Issue Boards"
      image_url: '/images/9_3/issue_board_usability_improvements.png'
      description: |
        We recognize that teams use Issue Boards in a variety of ways. To make
        it usable for even more teams, we now have collapsible **Backlog** and
        **Closed** columns. We've also tweaked adding issues in a board.
        When you click the plus sign +` to add an issue to a list,
        it now appears at the top of the list automatically,
        which is really helpful for long lists.

    - name: Search/Filter Bar Improvements
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/search/'
      documentation_text: "Read through the documentation on searching through GitLab"
      image_url: '/images/9_3/search_filter_bar_improvements.png'
      description: |
        We continue to make incremental improvements to the search/filter bar. You
        can now view user avatars.

        Also, by clicking on a filter, it activates the dropdown,
        allowing you to change filters quickly.

    - name: Internationalization of Project Home & Repository Files Pages
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/development/i18n_guide.html'
      documentation_text: "Learn how to contribute to translate GitLab"
      image_url: '/images/9_3/project-page-spanish.png'
      description: |
        In [GitLab 9.2](/blog/2017/05/22/gitlab-9-2-released/#internationalized-cycle-analytics)
        we started the process of
        [internationalization](https://gitlab.com/gitlab-org/gitlab-ce/issues/4012)
        with the Cycle Analytics page in German and Spanish. In GitLab 9.3 we
        are extending this to more frequently used pages such as the Project
        Home and Repository Files pages.

        The GitLab community are already starting to add more languages such as
        Chinese, Bulgarian, and Brazilian Portuguese. You can
        [follow the progress](https://gitlab.com/gitlab-org/gitlab-ce/issues/32951)
        and take a look at the
        [contributing guidelines](https://docs.gitlab.com/ee/development/i18n_guide.html)
        to get involved.

    - name: Improvements to GitLab Subgroups
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/group/subgroups/'
      documentation_text: "Read through the documentation on GitLab Subgroups"
      image_url: '/images/9_3/subgroups.png'
      description: |
        In GitLab 9.0 we [introduced Subgroups](/blog/2017/03/22/gitlab-9-0-released/#subgroups-ce-ee),
        allowing for more flexibility and management of groups and projects.

        We are continuing to improve this functionality in every release and in
        GitLab 9.3 we are making the discoverability and navigation of
        Subgroups a lot better. On the Groups page you can now see an
        expandable tree view of all subgroups and projects rather than having
        to navigate and explore them one page load at a time.

    - name: Access private Container Registry images
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html'
      documentation_text: "Read through the documentation on Personal Access Tokens"
      image_url: '/images/9_3/pat_registry.png'
      description: |
        When you deploy your docker-based project, you need to pull your image
        every time the deployment environment needs to start them. Since the
        integrated [GitLab Container Registry](https://docs.gitlab.com/ee/user/project/container_registry.html)
        is the natural choice to store your containers, in GitLab 9.3 you can
        use it to distribute them too!

        By creating a personal access token with the brand new `read_registry`
        scope, you have a persistent deploy token that could be used by external
        services, like Kubernetes, to access your images every time it's needed,
        without giving your full credentials or using a dummy user for this task.

    - name: Enhanced View for Repository Files
      available_in: [core, starter, premium]
      image_url: '/images/9_3/enhanced_files_view.png'
      description: |
        When viewing files in your repository, some extra information is now
        automatically extracted and reported in the same page.

        Starting with GitLab 9.3, you can see if your `.gitlab-ci.yml` or
        `.gitlab/route-map.yml` are valid or not, and which are the parsing errors.
        `LICENSE` files are also analyzed, and the information about the specific
        license is easily accessible with a link for further details about it.
        Dependency management systems are also exposed to make it clear what the projects rely on.

    - name: System Note with Link to Change in Outdated Diff Discussion
      available_in: [core, starter, premium]
      image_url: '/images/9_3/outdated_diff_discussion.png'
      description: |
        During merge request code review, we are constantly making code changes
        and commenting on those changes. It is often difficult to keep track. In
        particular, suppose we start commenting on a particular code line, and there
        are subsequent changes to that line. You may end up discussing something
        that has already changed.

        With this release, we added a system note to indicate that a line has already
        changed, so that when you are participating in comments with respect to a
        particular line, you know that it's already been changed, and can even see
        the change by clicking through.

    - name: Autolinking Package Names
      available_in: [core, starter, premium]
      image_url: '/images/9_3/autolink.png'
      description: |
        Ah, packages, those little gems (hah!) of wisdom wrapped up and ready for re-use.
        GitLab will now automatically detect and link packages in the file view,
        saving you valuable clicks every day. Neat, huh?

        #### This functionality will work for the following packages and languages:

        * `*.gemspec` (Ruby)
        * `package.json` (Node.js)
        * `composer.json` (PHP)
        * `Podfile` (Objective-C)
        * `*.podspec` (Objective-C)
        * `*.podspec.json` (Objective-C)
        * `Cartfile` (Objective-C)
        * `Godeps.json` (Go)
        * `requirements.txt` (Python)

    - name: Auto-cancel Redundant Pipelines Now Set to On for All Projects
      available_in: [core, starter, premium]
      description: |
        In order to benefit from the
        [automatic cancellation of redundant pipelines](https://about.gitlab.com/blog/2017/04/22/gitlab-9-1-released/#auto-cancel-redundant-pipelines-ce-ees-eep)
        and save a lot of time during your development process, GitLab 9.3 sets this behavior to on for all existing and new projects.

        If you really do want to disable it and keep redundant pipelines running, you can
        [tune the parameter](https://docs.gitlab.com/ee/user/project/pipelines/settings.html#auto-cancel-pending-pipelines) to reflect your needs.

    - name: API Support for Pipeline Schedules
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/api/pipeline_schedules.html'
      documentation_text: "Read through the documentation on Pipeline Schedules' API"
      image_url:
      description: |
        In GitLab 9.2 we
        [released Pipeline Schedules](/blog/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
        that can be configured and managed using the UI.
        Today with GitLab 9.3 we're also releasing calls
        to create and manage Pipeline Schedules through a set of APIs,
        in order to allow integration with other tools simple and effective.


    - name: Upcoming Nginx Upgrade
      available_in: [core, starter, premium]
      description: |
        As part of the upcoming GitLab 9.4 release,
        we will be upgrading the version of nginx included in our
        Omnibus packages to the new stable release, 1.12.
        Version 1.12 includes a number of improvements over the previous stable
        release, including the ability to
        [filter the log output](https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1585).

        This will be a transparent upgrade for users, however if you have added
        [your own customizations](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#inserting-custom-nginx-settings-into-the-gitlab-server-block)
        to the nginx configuration, please ensure they continue to work with version 1.12.

    - name: Performance Impact of Merge Requests now Quantified
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/ee/user/project/integrations/prometheus.html#determining-the-performance-impact-of-a-merge'
      documentation_text: "Read through the documentation on monitoring your apps with Prometheus"
      image_url: '/images/9_3/metrics-quantified.png'
      description: |
        With
        [GitLab 9.2](/blog/2017/05/22/gitlab-9-2-released/#app-performance-feedback-on-merge-requests)
        we added the ability to see the memory impact of a merge,
        by adding a sparkline to the Merge Request page. As part of GitLab 9.3 we are taking this
        further and now quantify the change in average memory usage for the 30 minutes before and after the merge.

        It is now easier than ever for developers to be cognizant of the impact they are
        having on service performance, by getting direct feedback within the tool they already use every day.

    - name: Debian 9 Support
      available_in: [core, starter, premium]
      gitlab_com: false
      description: |
        Support is available for the recent release of [Debian 9](https://www.debian.org/News/2017/20170617). Official Omnibus packages for GitLab 9.3 can be downloaded from our
        [installation page](https://about.gitlab.com/installation).

    - name: GitLab Runner 9.3
      available_in: [core, starter, premium]
      documentation_link: 'https://docs.gitlab.com/runner/'
      documentation_text: "Read through the documentation on GitLab Runner."
      image_url:
      description: |
        We're also releasing GitLab Runner 9.3 today!

        ##### Most interesting changes:

        * Add `GIT_CHECKOUT` variable which controls git checkout step ([merge request](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/585))
        * Add basic support for Volumes in Kubernetes executor ([merge request](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/516))
        * Add support for `cpus` option in Docker executor ([merge request](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/586))
        * Add support for `userns` option in Docker executor ([merge request](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/553))
        * Add requests backoff mechanism ([merge request](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/570))
        * Improve docker machine removal for Docker Machine executor ([merge request](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/582))

        List of all changes can be found in GitLab Runner's [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/v9.3.0/CHANGELOG.md).

    - name: GitLab Mattermost 3.10
      available_in: [core, starter, premium]
      gitlab_com: false
      documentation_link: https://docs.gitlab.com/omnibus/gitlab-mattermost/
      documentation_text: "Read through the documentation on GitLab/Mattermost integration"
      image_url:
      description: |
        GitLab 9.3 includes [Mattermost 3.10](https://about.mattermost.com/mattermost-3-10), [an open source Slack-alternative](https://about.mattermost.com/) with new support for Turkish language, new keyboard shortcuts, and much more.

    - name: Additional GitLab Service Metrics
      available_in: [core, starter, premium]
      gitlab_com: false
      documentation_link: 'https://docs.gitlab.com/ee/administration/monitoring/prometheus/gitlab_metrics.html'
      documentation_text: "Read through the documentation on the Additional Metrics"
      image_url:
      description: |
        GitLab 9.0 [introduced Prometheus monitoring](https://about.gitlab.com/blog/2017/03/22/gitlab-9-0-released/#monitoring-gitlab-with-prometheus) of the GitLab service, providing insight into Redis, PostgreSQL, and system performance.

        As part of GitLab 9.3 we have added experimental monitoring of our ruby code base, starting with a handful of metrics like pipeline status and user sign ins. We will continue to instrument additional areas of GitLab in subsequent releases.

    - name: Omnibus Improvements
      available_in: [core, starter, premium]
      gitlab_com: false
      documentation_link: 'https://docs.gitlab.com/omnibus/'
      documentation_text: "Read through the documentation on Omnibus GitLab"
      image_url:
      description: |
        The bundled Git and PostgreSQL packages have been updated. Git is now v2.13.0 and Postgres is v9.6.3.

# MVP
mvp:
  fullname: Huang Tao
  gitlab: htve
  description: |
    Huang was incredible in supporting our efforts to make [internationalization](https://gitlab.com/gitlab-org/gitlab-ce/issues/32951)
    a first-class citizen of GitLab by leading the community efforts to source and
    implement translations in new languages. Thank you Huang!

# COVER IMAGE LICENCE
cover_img:
  image_url: 'https://www.pexels.com/photo/snow-landscape-mountains-nature-41118/'
  licence: CC0
  licence_url: 'https://www.pexels.com/photo-license/'

# CTA BUTTONS
cta:
  - title: Join us for an upcoming event
    link: '/events/'

# UPGRADE BAROMETER
barometer:
  description: |
    To upgrade to GitLab 9.3, no downtime is required.

    However we're also migrating data for CI jobs and setting the `auto-cancel redundant pipelines` flag to on for all projects.
    If you have a significant number of jobs or projects, this could take some time.
    
    If you are using MySQL, you need to grant the database user used by GitLab the `TRIGGER` permission before upgrading, to prevent issues with migrations:

    ```bash
    mysql -u root -p -e "GRANT TRIGGER ON \`gitlabhq_production\`.* TO 'git'@'localhost';"
    ```
    
    If you use MySQL with replication, or just have MySQL configured with binary logging, 
    you will need to also run the following on all of your MySQL servers:
    
    ```bash
    mysql -u root -p -e "SET GLOBAL log_bin_trust_function_creators = 1;"
    ```
    
    You can make this setting permanent by adding it to your `my.cnf`:
    
    ```
    log_bin_trust_function_creators=1
    ```

    Starting with GitLab 9.1.0 it's possible to upgrade to a newer version of GitLab
    without having to take your GitLab instance offline. However, for this to work
    there are the following requirements:

      1. You can only upgrade 1 release at a time. For example, if 9.1.15 is the last
         release of 9.1 then you can safely upgrade from that version to 9.2.0.
         However, if you are running 9.1.14 you first need to upgrade to 9.1.15.
      1. You have to use [post-deployment migrations](https://docs.gitlab.com/ee/development/post_deployment_migrations.html).
      1. You are using PostgreSQL. If you are using MySQL you will still need downtime
         when upgrading.

    This applies to major, minor, and patch releases unless stated otherwise in a
    release post.

    A new version of our API was released in [GitLab 9.0](/blog/2017/03/22/gitlab-9-0-released/#api-v4).
    While existing calls to API v3 will continue to work until August 2017, we
    advise you to make any necessary changes to applications that use the v3 API.
    [Read the documentation](https://docs.gitlab.com/ee/api/v3_to_v4.html) to learn
    more.

# DEPRECATIONS
deprecations:
  - feature_name: Dropping Support for Subgroups in MySQL
    due: June 22nd, 2017.
    description: |
      In 9.0 we released an enhancement to group management by
      [introducing subgroups](/blog/2017/03/22/gitlab-9-0-released/#subgroups-ce-ee).
      Unfortunately, for performance and consistency, we have to drop this
      feature on GitLab instances running MySQL. Subgroups will no longer be
      available on MySQL in GitLab 9.3 and the upgrade process will migrate any
      subgroups to the root of the GitLab server.

      While investigating some occurrences of inconsistencies with project
      membership, we [discovered](https://gitlab.com/gitlab-org/gitlab-ce/issues/30472#note_27747600)
      that our approach to implementing subgroups was
      not efficient enough. While PostgreSQL provides easy workarounds, MySQL
      unfortunately did not provide any alternatives that did not require vastly
      changing the way we store the hierarchy of groups.

      In order to address the issue, we have removed support from
      Subgroups in 9.3.

      If you are running on MySQL and have created subgroups in your GitLab
      instance, the upgrade process will convert any subgroups to regular groups.

      We continue to support MySQL in general, although some features such as
      [GitLab Geo](https://docs.gitlab.com/ee/gitlab-geo/) and
      [Zero-downtime migrations](https://gitlab.com/gitlab-org/gitlab-ce/issues/26130)
      are only available on PostgreSQL.
  - feature_name: End of support for the openSUSE 42.1 Omnibus package
    due: July 22nd, 2017.
    description: |
      GitLab 9.3 will be the last version to include support for openSUSE 42.1,
      as it is no [longer supported by the community](https://lists.opensuse.org/opensuse-announce/2017-05/msg00002.html).
      Starting with GitLab 9.4 (to be released on July 22nd, 2017) we will be offering
      support for openSUSE version 42.2.
  - feature_name: Relative URL changes now require downtime
    description: |
      Changes to relative URL configuration in Omnibus installations now require a
      `sudo gitlab-ctl restart unicorn` after reconfigure to take effect, in order to restart Unicorn.
      Restarting Unicorn requires downtime.
    due: June 22nd, 2017.
