You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AzureDevOps.tsx 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2019 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. import * as React from 'react';
  21. import Helmet from 'react-helmet';
  22. import { Link } from 'react-router';
  23. import SQPageContainer from './components/SQPageContainer';
  24. import { isLoggedIn } from '../../../helpers/users';
  25. import { getBaseUrl } from '../../../helpers/urls';
  26. import './style.css';
  27. const LANGUAGES = [
  28. { name: 'JavaScript', file: 'js.svg', width: 60 },
  29. { name: 'TypeScript', file: 'ts.svg', width: 130 },
  30. { name: 'C#', file: 'csharp.svg', width: 60 },
  31. { name: 'C++', file: 'c-c-plus-plus.svg', width: 53 },
  32. { name: 'T-SQL', file: 't-sql.svg', width: 80 },
  33. { name: 'VB', file: 'vb.svg', width: 70 }
  34. ];
  35. export default function AzureDevOps() {
  36. return (
  37. <SQPageContainer>
  38. {({ currentUser }) => (
  39. <div className="page page-limited sc-page">
  40. <Helmet title="Continuous Code Quality in Azure Devops | SonarCloud">
  41. <meta
  42. content="Enhance Azure DevOps with continuous code quality and automatically analyze branches and decorate pull requests."
  43. name="description"
  44. />
  45. </Helmet>
  46. <ul className="sc-top-nav">
  47. <li className="sc-top-nav-item">
  48. <Link className="sc-top-nav-link" to="/about/sq">
  49. Home
  50. </Link>
  51. </li>
  52. </ul>
  53. <div className="sc-child-header">
  54. <h1 className="sc-child-title">Get the full experience in Azure DevOps</h1>
  55. </div>
  56. <ul className="sc-features-list">
  57. <li className="sc-feature sc-child-feature">
  58. <h3 className="sc-feature-title">Native extension</h3>
  59. <p className="sc-feature-description">
  60. Using your existing Azure DevOps account and the SonarCloud Azure DevOps build
  61. tasks, adding and configuring SonarCloud analysis to an existing build is a matter
  62. of minutes.
  63. </p>
  64. </li>
  65. <li className="sc-feature sc-child-feature">
  66. <h3 className="sc-feature-title">Branches and PR analysis</h3>
  67. <p className="sc-feature-description">
  68. SonarCloud comes with a built-in feature to automatically analyze project branches
  69. and pull requests as soon as they get created.
  70. </p>
  71. </li>
  72. <li className="sc-feature sc-child-feature">
  73. <h3 className="sc-feature-title">Built-in Quality Gate</h3>
  74. <p className="sc-feature-description">
  75. A quality gate is available out of the box in order to verify code quality criteria
  76. at any time, enabling to fail build pipelines but also enabling to notify, through a
  77. webhook, any system that code quality criteria are not met.
  78. </p>
  79. </li>
  80. <li className="sc-feature sc-child-feature">
  81. <h3 className="sc-feature-title">Dedicated widget</h3>
  82. <p className="sc-feature-description">
  83. Once a project is in SonarCloud, a configurable widget can be added to the Azure
  84. DevOps dashboard in order to add code quality to KPIs already used on the project.
  85. </p>
  86. </li>
  87. </ul>
  88. <div className="sc-vsts-start-wrapper">
  89. <div className="sc-vsts-start">
  90. {!isLoggedIn(currentUser) && (
  91. <div className="sc-vsts-start-box">
  92. <img
  93. alt="SonarCloud"
  94. height="38"
  95. src={`${getBaseUrl()}/images/sonarcloud-square-logo.svg`}
  96. />
  97. <h3 className="sc-vsts-start-title">Log in or Sign up</h3>
  98. <a className="sc-orange-button" href="/sessions/init/microsoft">
  99. SonarCloud
  100. </a>
  101. </div>
  102. )}
  103. <div className="sc-vsts-start-box">
  104. <img
  105. alt="Azure DevOps Extension"
  106. height="38"
  107. src={`${getBaseUrl()}/images/sonarcloud/windows.svg`}
  108. />
  109. <h3 className="sc-vsts-start-title">Install Azure DevOps Extension</h3>
  110. <a
  111. className="sc-black-button"
  112. href="https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud"
  113. rel="noopener noreferrer"
  114. target="_blank">
  115. Marketplace
  116. </a>
  117. </div>
  118. </div>
  119. </div>
  120. <div className="sc-integrations">
  121. <h2 className="sc-sq-header2 sc-integrations-title">Analyze .NET languages and more</h2>
  122. <ul className="sc-languages-list">
  123. {LANGUAGES.map(language => (
  124. <li key={language.name}>
  125. <img
  126. alt={language.name}
  127. src={`${getBaseUrl()}/images/languages/${language.file}`}
  128. style={{ width: `${language.width}px` }}
  129. />
  130. </li>
  131. ))}
  132. </ul>
  133. </div>
  134. </div>
  135. )}
  136. </SQPageContainer>
  137. );
  138. }