diff --git a/+gn b/+gn new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/+gn @@ -0,0 +1 @@ + diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..ccfd8320716 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.dockerignore +.env +.env.* +.git +.gitignore +.travis.yml +Dockerfile +spec +#IDEs folders +.idea \ No newline at end of file diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000000..d964d82c9a8 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,54 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 90 + +# Number of days of inactivity before a stale Issue or Pull Request is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 1 + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - WIP + - work in progress + - important + - locked + - ready-to-doc + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: false + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Label to use when marking as stale +staleLabel: stale + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + Thanks for contributing to this issue. As it has been 90 days since the last activity, we are automatically closing the issue. This is often because the request was already solved in some way and it just wasn't updated or it's no longer applicable. If that's not the case, please do feel free to either reopen this issue or open a new one. We'll gladly take a look again! You can read more here: https://blog.travis-ci.com/2018-03-09-closing-old-issues +# Comment to post when removing the stale label. +# unmarkComment: > +# Your comment here. + +# Comment to post when closing a stale Issue or Pull Request. +#closeComment: > +# Thanks for contributing to this issue. As it has been 90 days since the last activity, we are automatically closing the issue. This is often because the request was already solved in some way and it just wasn't updated or it's no longer applicable. If that's not the case, please do feel free to either reopen this issue or open a new one. We'll gladly take a look again! You can read more here: https://blog.travis-ci.com/2018-03-09-closing-old-issues + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +# Limit to only `issues` or `pulls` +only: issues + +# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': +# pulls: +# daysUntilStale: 30 +# markComment: > +# This pull request has been automatically marked as stale because it has not had +# recent activity. It will be closed if no further activity occurs. Thank you +# for your contributions. + +# issues: +# exemptLabels: +# - confirmed diff --git a/.gitignore b/.gitignore index f5c103a187f..96ddb289a57 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,19 @@ -.bundle .DS_Store +.bundle +.history +.jekyll-metadata .rvmrc +.sass-cache +*.sw[op] +# These files in _data are generated +_data/*ip_range.yml +_data/trusty*language*mapping* +_data/node_js_versions.yml +_data/language-details/*-versions.yml +assets/javascripts/tablefilter _site -bin +node_modules source/tmp/* -.sass-cache tmp/ -.jekyll-metadata -node_modules -generated-language-mapping.json -_data/trusty_mapping_data.yml -_data/gce_ip_range.yml +api/ +user/notifications.md diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 00000000000..cc32da4b99e --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1 @@ +inherit_from: .rubocop_todo.yml diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml new file mode 100644 index 00000000000..f4a963eb9e6 --- /dev/null +++ b/.rubocop_todo.yml @@ -0,0 +1,232 @@ +# This configuration was generated by +# `rubocop --auto-gen-config` +# on 2017-11-29 20:00:05 -0500 using RuboCop version 0.51.0. +# The point is for the user to remove these configuration records +# one by one as the offenses are removed from the code base. +# Note that changes in the inspected code, or installation of new +# versions of RuboCop, may require this file to be generated again. + +# Offense count: 1 +# Cop supports --auto-correct. +# Configuration parameters: Include, TreatCommentsAsGroupSeparators. +# Include: **/Gemfile, **/gems.rb +Bundler/OrderedGems: + Exclude: + - 'Gemfile' + +# Offense count: 4 +# Cop supports --auto-correct. +Layout/AlignArray: + Exclude: + - '_site/Rakefile' + +# Offense count: 1 +# Cop supports --auto-correct. +Layout/EmptyLinesAroundAccessModifier: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + +# Offense count: 2 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth. +# SupportedStyles: special_inside_parentheses, consistent, align_brackets +Layout/IndentArray: + Exclude: + - '_site/Rakefile' + +# Offense count: 4 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth. +# SupportedStyles: special_inside_parentheses, consistent, align_braces +Layout/IndentHash: + Exclude: + - '_site/Rakefile' + +# Offense count: 4 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces. +# SupportedStyles: space, no_space, compact +# SupportedStylesForEmptyBraces: space, no_space +Layout/SpaceInsideHashLiteralBraces: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + +# Offense count: 2 +Lint/RescueWithoutErrorClass: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +Lint/ScriptPermission: + Exclude: + - '_site/Rakefile' + +# Offense count: 2 +Lint/ShadowingOuterLocalVariable: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/Rakefile' + +# Offense count: 1 +Lint/UriEscapeUnescape: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + +# Offense count: 1 +Metrics/AbcSize: + Max: 29 + +# Offense count: 1 +# Configuration parameters: CountComments, ExcludedMethods. +Metrics/BlockLength: + Max: 27 + +# Offense count: 1 +Metrics/CyclomaticComplexity: + Max: 7 + +# Offense count: 9 +# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. +# URISchemes: http, https +Metrics/LineLength: + Max: 191 + +# Offense count: 1 +# Configuration parameters: CountComments. +Metrics/MethodLength: + Max: 27 + +# Offense count: 1 +Metrics/PerceivedComplexity: + Max: 8 + +# Offense count: 2 +# Cop supports --auto-correct. +# Configuration parameters: AutoCorrect. +Security/JSONLoad: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/Rakefile' + +# Offense count: 1 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods. +# SupportedStyles: line_count_based, semantic, braces_for_chaining +# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object +# FunctionalMethods: let, let!, subject, watch +# IgnoredMethods: lambda, proc, it +Style/BlockDelimiters: + Exclude: + - '_site/Rakefile' + +# Offense count: 3 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: braces, no_braces, context_dependent +Style/BracesAroundHashParameters: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/Rakefile' + +# Offense count: 4 +Style/Documentation: + Exclude: + - 'spec/**/*' + - 'test/**/*' + - '_plugins/select_env_var_generator.rb' + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/config.ru' + - 'config.ru' + +# Offense count: 1 +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: for, each +Style/For: + Exclude: + - '_site/Rakefile' + +# Offense count: 9 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: when_needed, always, never +Style/FrozenStringLiteralComment: + Exclude: + - 'Gemfile' + - '_plugins/select_env_var_generator.rb' + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/Rakefile' + - '_site/config.ru' + - 'config.ru' + - 'slate/Gemfile' + - 'slate/Rakefile' + - 'slate/config.rb' + +# Offense count: 1 +# Configuration parameters: MinBodyLength. +Style/GuardClause: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + +# Offense count: 34 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols. +# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys +Style/HashSyntax: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/Rakefile' + - '_site/config.ru' + - 'config.ru' + - 'slate/Gemfile' + - 'slate/Rakefile' + - 'slate/config.rb' + +# Offense count: 4 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: require_parentheses, require_no_parentheses, require_no_parentheses_except_multiline +Style/MethodDefParentheses: + Exclude: + - '_site/config.ru' + - 'config.ru' + +# Offense count: 2 +# Cop supports --auto-correct. +Style/MutableConstant: + Exclude: + - '_plugins/select_env_var_generator.rb' + - '_plugins/webhoook_payload_doc_handler.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +# Configuration parameters: PreferredDelimiters. +Style/PercentLiteralDelimiters: + Exclude: + - '_plugins/select_env_var_generator.rb' + +# Offense count: 40 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline. +# SupportedStyles: single_quotes, double_quotes +Style/StringLiterals: + Exclude: + - '_plugins/webhoook_payload_doc_handler.rb' + - '_site/Rakefile' + - 'slate/Gemfile' + +# Offense count: 1 +# Cop supports --auto-correct. +# Configuration parameters: SupportedStyles. +# SupportedStyles: percent, brackets +Style/SymbolArray: + EnforcedStyle: percent + MinSize: 3 + +# Offense count: 1 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyleForMultiline, SupportedStylesForMultiline. +# SupportedStylesForMultiline: comma, consistent_comma, no_comma +Style/TrailingCommaInLiteral: + Exclude: + - '_site/Rakefile' diff --git a/.ruby-version b/.ruby-version index 005119baaa0..e650c01d92f 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.4.1 +3.2.9 diff --git a/.travis.yml b/.travis.yml index d44e81eb0ab..7b9f99839cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,29 +1,66 @@ #language: ruby -sudo: false -dist: trusty -language: python -python: - - "3.5.2" +dist: bionic + branches: only: - master -env: - global: - - PATH=$HOME/.local/user/bin:$PATH -cache: - pip: true - directories: - - vendor/bundle - - node_modules -deploy: - provider: heroku - api_key: - secure: "hylw2GIHMvZKOKX3uPSaLEzVrUGEA9mzGEA0s4zK37W9HJCTnvAcmgRCwOkRuC4L7R4Zshdh/CGORNnBBgh1xx5JGYwkdnqtjHuUQmWEXCusrIURu/iEBNSsZZEPK7zBuwqMHj2yRm64JfbTDJsku3xdoA5Z8XJG5AMJGKLFgUQ=" - app: docs-travis-ci-com - skip_cleanup: true - on: - branch: - - master + +jobs: + include: + - name: build site + language: python + python: + - "3.8.3" + env: + global: + - PATH=$HOME/.local/user/bin:$PATH + - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer + cache: + pip: true + directories: + - vendor/bundle + - node_modules + - $TRAVIS_BUILD_DIR/tmp/.htmlproofer #https://github.com/gjtorikian/html-proofer/issues/381 + addons: + apt: + packages: + - libxml2-utils + - libxml2-dev + - libxslt1-dev + - pkg-config + before_install: + - bundle config set force_ruby_platform true + install: + - rvm use 3.2.9 --install + - bundle install --deployment + - sudo apt-get install libcurl4-openssl-dev # required to avoid SSL errors + script: + - bundle exec rake test + - xmllint --noout _site/feed.build-env-updates.xml + + - name: update dpl v2 docs + if: type = cron || commit_message =~ /ci:dpl/ + language: shell + cache: false + install: + - rvm use 3.3.1 --install + script: + - git clone https://github.com/travis-ci/dpl.git + - cd dpl + - gem build dpl.gemspec + - gem install dpl-*.gem + - cd .. + - rm -rf dpl + - bin/dpl + deploy: + - provider: git_push + token: + secure: "YHuTjIGKpG0A8QJ4kmdLfOW1n+62uLakXv0KjCzWExl22qLSn2frip3j8JsaeMfndsmNZBUfGoONVHvDS+PHnkbRMYf21SjgctpVfHRYZQ3pulexOViEQ6azRgCBWuPO8A+vAyxvjlV4e3UDGnt2x/0X/Tdg9iVf/zzBGjM0YX0=" + branch: auto-dpl-v2-update-docs + pull_request: true + edge: + branch: master + notifications: slack: rooms: @@ -31,8 +68,3 @@ notifications: on_success: never webhooks: https://docs.travis-ci.com/update_webhook_payload_doc -install: - - rvm use 2.3.1 --install - - bundle install --deployment -script: - - bundle exec rake test diff --git a/404.html b/404.html index 44d73ee493a..bd8e63f644e 100644 --- a/404.html +++ b/404.html @@ -3,6 +3,14 @@ + + + + Travis CI Documentation - 404 Page not found @@ -200,9 +208,8 @@ .swiftype-widget .autocomplete ul li.active p.sections em { font-weight: 600; color: #969496; } - + - + + + +

- Travis + Travis

diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..fb2da2e94cc --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, other beliefs, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Being constructive and proportionate when criticizing +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at the following email address: conduct@travis-ci.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..5e21ddd9918 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM ruby:3.2-slim +LABEL maintainer="Travis CI GmbH " + +# packages required for bundle install +RUN ( \ + apt-get update ; \ + apt-get install -y --no-install-recommends git make gcc g++ libpq-dev libcurl4-openssl-dev curl nodejs \ + && rm -rf /var/lib/apt/lists/* \ +) + +# ------ +# Set the encoding to UTF-8 +ENV LC_ALL=C.UTF-8 \ + LANG=en_US.UTF-8 \ + LANGUAGE=en_US.UTF-8 +# ----- +ENV WEBHOOK_PAYLOAD_GIST_ID=4e317d6e71be6d0278be46bb751b2f78 + +# throw errors if Gemfile has been modified since Gemfile.lock +RUN bundle config --global frozen 1 + +# Configure bundler for production +RUN mkdir -p /app + +WORKDIR /app +COPY Gemfile /app +COPY Gemfile.lock /app + +# Install bundler and gems +RUN gem install bundler:2.4.22 \ + && bundle install --verbose --retry=3 +RUN gem install --user-install executable-hooks + +COPY . /app +RUN bundle exec rake build + +EXPOSE 4000 +CMD ["bundle", "exec", "puma", "-p", "4000"] diff --git a/Gemfile b/Gemfile index 10ccb595c5c..c9eeb09392c 100644 --- a/Gemfile +++ b/Gemfile @@ -1,19 +1,52 @@ source 'https://rubygems.org' -ruby '2.4.1' if ENV.key?('DYNO') +ruby '~> 3.2' -gem 'jekyll', '>=3.1.6' -gem 'rdiscount', '>=2.2.0.1' - -gem 'jekyll-redirect-from' +gem 'faraday' +gem 'html-proofer', '~> 3.0' +gem 'jekyll', '~> 4.3' gem 'jekyll-paginate' - +gem 'jekyll-redirect-from' +gem 'puma' +gem 'pry', group: :test +gem 'rack', '~> 3.0' gem 'rack-jekyll' gem 'rack-ssl-enforcer' -gem 'puma' +gem 'rake' +gem 'rdiscount', '>=2.2.0.1' +gem 'rubocop', group: :test -gem 'faraday' -gem 'rake' +# All of this is for Slate / middleman -gem 'html-proofer', '~> 3.0' +gem "middleman", '~> 4.6' +gem 'middleman-sprockets' + +# For syntax highlighting +gem "middleman-syntax" + +# Plugin for middleman to generate GitHub pages +gem 'middleman-gh-pages' + +# Live-reloading plugin +gem "middleman-livereload" + +# Needed for Slate / middleman +gem 'redcarpet' + +# Cross-templating language block fix for Ruby 1.8 +platforms :mri_18 do + gem "ruby18_source_location" +end + +# Remove warnings according to https://github.com/Compass/compass/pull/2088 +git 'https://github.com/ably-forks/compass', branch: 'sass-deprecation-warning-fix', ref: '3861c9d' do + gem 'compass-core' +end + +group :dpl do + gem 'dpl', git: 'https://github.com/travis-ci/dpl' + gem 'cl' +end + +gem 'netrc' diff --git a/Gemfile.lock b/Gemfile.lock index 1f192f79d9f..ebf76d6980e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,101 +1,349 @@ +GIT + remote: https://github.com/ably-forks/compass + revision: 3861c9d9956dd1a5f4290ea87e9d90ba7fe44394 + ref: 3861c9d + branch: sass-deprecation-warning-fix + specs: + compass-core (1.0.2) + multi_json (~> 1.0) + sass (>= 3.3.0, < 3.5) + +GIT + remote: https://github.com/travis-ci/dpl + revision: 8c6eabc699178e992236adf4472f1753b7b292ce + specs: + dpl (2.0.5.4) + logger (~> 1.7.0) + net-http (~> 0.6.0) + travis-cl + travis-packagecloud-ruby + uri (~> 1.0.2) + GEM remote: https://rubygems.org/ specs: - activesupport (5.0.2) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (~> 0.7) - minitest (~> 5.1) - tzinfo (~> 1.1) - addressable (2.5.1) - public_suffix (~> 2.0, >= 2.0.2) + activesupport (8.0.2.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + ast (2.4.3) + base64 (0.3.0) + benchmark (0.4.1) + bigdecimal (3.2.3) + cl (1.2.4) + regstry (~> 1.0.3) + coderay (1.1.3) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) colorator (1.1.0) - colored (1.2) - concurrent-ruby (1.0.5) - ethon (0.10.1) - ffi (>= 1.3.0) - faraday (0.12.0.1) - multipart-post (>= 1.2, < 3) - ffi (1.9.18) + concurrent-ruby (1.3.5) + connection_pool (2.5.4) + contracts (0.17.2) + csv (3.3.5) + dotenv (3.1.8) + drb (2.2.3) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + erubi (1.13.1) + ethon (0.15.0) + ffi (>= 1.15.0) + eventmachine (1.2.7) + excon (0.112.0) + execjs (2.10.0) + faraday (2.13.4) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-net_http (3.4.1) + net-http (>= 0.5.0) + fast_blank (1.0.1) + fastimage (2.4.0) + ffi (1.17.2) + ffi (1.17.2-aarch64-linux-gnu) + ffi (1.17.2-arm64-darwin) + ffi (1.17.2-x86_64-linux-gnu) forwardable-extended (2.6.0) - html-proofer (3.6.0) - activesupport (>= 4.2, < 6.0) + google-protobuf (4.32.0) + bigdecimal + rake (>= 13) + google-protobuf (4.32.0-aarch64-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.32.0-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.32.0-x86_64-linux-gnu) + bigdecimal + rake (>= 13) + haml (6.3.0) + temple (>= 0.8.2) + thor + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + hashie (5.0.0) + html-proofer (3.19.4) addressable (~> 2.3) - colored (~> 1.2) - mercenary (~> 0.3.2) - nokogiri (~> 1.5) - parallel (~> 1.3) - typhoeus (~> 0.7) + mercenary (~> 0.3) + nokogiri (~> 1.13) + parallel (~> 1.10) + rainbow (~> 3.0) + typhoeus (~> 1.3) yell (~> 2.0) - i18n (0.8.1) - jekyll (3.4.3) + http_parser.rb (0.8.0) + i18n (1.14.7) + concurrent-ruby (~> 1.0) + jekyll (4.4.1) addressable (~> 2.4) + base64 (~> 0.2) colorator (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 3.0) - mercenary (~> 0.3.3) + csv (~> 3.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + json (~> 2.6) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.3, >= 0.3.6) pathutil (~> 0.9) - rouge (~> 1.7) + rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) jekyll-paginate (1.1.0) - jekyll-redirect-from (0.12.1) - jekyll (~> 3.3) - jekyll-sass-converter (1.5.0) - sass (~> 3.4) - jekyll-watch (1.5.0) - listen (~> 3.0, < 3.1) - kramdown (1.13.2) - liquid (3.0.6) - listen (3.0.8) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - mercenary (0.3.6) - mini_portile2 (2.2.0) - minitest (5.10.1) - multipart-post (2.0.0) - nokogiri (1.8.0) - mini_portile2 (~> 2.2.0) - parallel (1.11.1) - pathutil (0.14.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) + jekyll-watch (2.2.1) + listen (~> 3.0) + json (2.13.2) + json_pure (2.8.1) + kramdown (2.5.1) + rexml (>= 3.3.9) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + language_server-protocol (3.17.0.5) + lint_roller (1.1.0) + liquid (4.0.4) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + memoist (0.16.2) + mercenary (0.4.0) + method_source (1.1.0) + middleman (4.6.2) + middleman-cli (= 4.6.2) + middleman-core (= 4.6.2) + middleman-cli (4.6.2) + thor (>= 0.17.0, < 2) + middleman-core (4.6.2) + activesupport (>= 6.1) + addressable (~> 2.4) + bundler (~> 2.0) + coffee-script (~> 2.2) + contracts + dotenv + erubi + execjs (~> 2.0) + fast_blank + fastimage (~> 2.0) + haml (>= 4.0.5) + hamster (~> 3.0) + hashie (>= 3.4, < 6.0) + i18n (>= 1.6, < 1.15) + kramdown (~> 2.4) + listen (~> 3.0) + memoist (~> 0.14) + padrino-helpers (~> 0.15.0) + parallel + rack (>= 3) + rackup + sassc (~> 2.0) + servolux + tilt (~> 2.2) + toml + uglifier (>= 3, < 5) + webrick + middleman-gh-pages (0.4.1) + rake (> 0.9.3) + middleman-livereload (3.5.0) + em-websocket (~> 0.5.1) + middleman-core (>= 3.3) + rack-livereload (~> 0.6.1) + middleman-sprockets (4.1.1) + middleman-core (~> 4.0) + sprockets (>= 3.0) + middleman-syntax (3.6.1) + middleman-core (>= 3.2) + rouge (~> 3.2) + mime (0.4.4) + mini_portile2 (2.8.9) + minitest (5.25.5) + multi_json (1.17.0) + net-http (0.6.0) + uri + netrc (0.11.0) + nio4r (2.7.4) + nokogiri (1.18.9) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) + nokogiri (1.18.9-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.9-arm64-darwin) + racc (~> 1.4) + nokogiri (1.18.9-x86_64-linux-gnu) + racc (~> 1.4) + padrino-helpers (0.15.3) + i18n (>= 0.6.7, < 2) + padrino-support (= 0.15.3) + tilt (>= 1.4.1, < 3) + padrino-support (0.15.3) + parallel (1.27.0) + parser (3.3.9.0) + ast (~> 2.4.1) + racc + parslet (2.0.0) + pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (2.0.5) - puma (3.8.2) - rack (1.6.5) - rack-jekyll (0.5.0) - jekyll (>= 1.3) - listen (>= 1.3) - rack (~> 1.5) + prism (1.4.0) + pry (0.15.2) + coderay (~> 1.1) + method_source (~> 1.0) + public_suffix (6.0.2) + puma (7.0.0) + nio4r (~> 2.0) + racc (1.8.1) + rack (3.1.16) + rack-jekyll (0.3.5) + jekyll + rack + rack-livereload (0.6.1) + rack (>= 3.0, < 3.2) rack-ssl-enforcer (0.2.9) - rake (12.0.0) - rb-fsevent (0.9.8) - rb-inotify (0.9.8) - ffi (>= 0.5.0) - rdiscount (2.2.0.1) - rouge (1.11.1) - safe_yaml (1.0.4) - sass (3.4.23) - thread_safe (0.3.6) - typhoeus (0.8.0) - ethon (>= 0.8.0) - tzinfo (1.2.3) - thread_safe (~> 0.1) - yell (2.0.7) + rackup (2.2.1) + rack (>= 3) + rainbow (3.1.1) + rake (13.3.0) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rdiscount (2.2.7.3) + redcarpet (3.6.1) + regexp_parser (2.11.2) + regstry (1.0.15) + rexml (3.4.2) + rouge (3.30.0) + rubocop (1.80.2) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.46.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.46.0) + parser (>= 3.3.7.2) + prism (~> 1.4) + ruby-progressbar (1.13.0) + ruby18_source_location (0.2) + safe_yaml (1.0.5) + sass (3.4.25) + sass-embedded (1.92.0) + google-protobuf (~> 4.31) + rake (>= 13) + sass-embedded (1.92.0-aarch64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.92.0-arm64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.92.0-x86_64-linux-gnu) + google-protobuf (~> 4.31) + sassc (2.4.0) + ffi (~> 1.9) + securerandom (0.4.1) + servolux (0.13.0) + sprockets (4.2.2) + concurrent-ruby (~> 1.0) + logger + rack (>= 2.2.4, < 4) + temple (0.10.4) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + thor (1.4.0) + tilt (2.6.1) + toml (0.3.0) + parslet (>= 1.8.0, < 3.0.0) + travis-cl (1.2.4) + regstry (~> 1.0) + travis-packagecloud-ruby (1.1.0) + excon (~> 0.40) + json_pure (~> 2) + mime (~> 0.4) + typhoeus (1.5.0) + ethon (>= 0.9.0, < 0.16.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + uglifier (4.2.1) + execjs (>= 0.3.0, < 3) + unicode-display_width (2.6.0) + uri (1.0.3) + webrick (1.9.1) + yell (2.2.2) PLATFORMS + aarch64-linux + arm64-darwin-24 ruby + x86_64-linux DEPENDENCIES + cl + compass-core! + dpl! faraday html-proofer (~> 3.0) - jekyll (>= 3.1.6) + jekyll (~> 4.3) jekyll-paginate jekyll-redirect-from + middleman (~> 4.6) + middleman-gh-pages + middleman-livereload + middleman-sprockets + middleman-syntax + netrc + pry puma + rack (~> 3.0) rack-jekyll rack-ssl-enforcer rake rdiscount (>= 2.2.0.1) + redcarpet + rubocop + ruby18_source_location + +RUBY VERSION + ruby 3.2.9p265 BUNDLED WITH - 1.14.6 + 2.4.22 diff --git a/README.md b/README.md index 0555dcd8e20..36b86db9f3b 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,80 @@ -# About this repository [![Build Status](https://travis-ci.org/travis-ci/docs-travis-ci-com.svg?branch=master)](https://travis-ci.org/travis-ci/docs-travis-ci-com) +# About Travis CI Repository [![Build Status](https://travis-ci.com/travis-ci/docs-travis-ci-com.svg?branch=master)](https://travis-ci.com/travis-ci/docs-travis-ci-com) -This is the documentation site for Travis CI! () +This is the documentation site for [Travis CI!](https://docs.travis-ci.com/). +Follow this guide to learn how to add new documentation and how to update existing documentation. -## How to contribute +## Add Documentation -Fork the repository, read the rest of this README file and make some changes. -Once you're done with your changes send a pull request. Thanks! +The following are the steps to add documentation. -## How to check your edit before sending PR +1. Review the [Travis CI documentation guidelines](/STYLE.md). +1. Check existing documentation. Verify that the documentation does not already exist or look for related documentation that can be enhanced. +1. Determine proper placement. In the [Travis CI repository](https://github.com/travis-ci/docs-travis-ci-com/tree/master), browse to the *user* folder (or any other specific folder) and create a new branch. +1. Create a new file and add the new documentation files. +1. Ensure to insert the name and extension for the file. +1. Commit your changes and add a short message to describe your changes. +1. Test the changes locally to verify your edits. +1. Submit a pull request. Include a clear title and description of the proposed changes, and click “**Create pull request**.” -You can inspect how your edits will be reflected by the documentation site. +Thank you for your contribution! The Travis CI team will review the pull request and approve any necessary changes. -### Install dependencies +## Update Existing Documentation -1. Make sure you have Ruby and RubyGems installed. +If you see a page that needs to be updated or that can be improved, follow these steps to update Travis CI's existing documentation. -1. Install [bundler](http://bundler.io/): +1. Review the [Travis CI documentation guidelines](/STYLE.md). +1. Identify the Travis CI docs page that needs to be updated. +1. Click the “**Improve this page on GitHub**” button in the top right corner. +1. Once on GitHub, edit the relevant file. +1. Commit your changes. Name your branch, and click the “**Propose changes**” button. +1. Build the docs in a local environment to verify your edits. +1. Submit a pull request. Ensure a clear title and description of the proposed changes are added, and click “**Create pull request**.” + +Thank you for your contribution. The Travis CI team will review the pull request and approve any necessary changes. + + +## Build Local Environment + +You can inspect how the documentation site will reflect your edits. Follow the steps below to learn how to build your local environment and check all your edits before sending the pull request for approval. + +### Install Dependencies + +Follow the steps below to install dependencies. + +1. Ensure you have *Ruby* and *RubyGems* installed. + +1. Clone the [Travis CI docs](https://github.com/travis-ci/docs-travis-ci-com/tree/master) repository. + +1. Install [bundler](http://bundler.io/) as follows: ```sh-session $ gem install bundler ``` -1. Install application dependencies: +1. Next, install application dependencies: ```sh-session $ bundle install --binstubs ``` -### Generate documentation +### Generate Documentation -Run +To generate the documentation, run the following command: ```sh-session $ ./bin/jekyll build ``` +### Run the Application Server -### Run application server - -You are now ready to start your documentation site, using Jekyll or Puma. +You are ready to start your local documentation site using Jekyll or Puma. For documentation edits, Jekyll is sufficient. -#### Starting and inspecting edits with Jekyll +#### Edit with Jekyll -1. Run Jekyll server: +To start and inspect your edits using Jekyll, follow the steps below: + +1. Run the *Jekyll* server: ```sh-session $ ./bin/jekyll serve @@ -51,12 +82,12 @@ For documentation edits, Jekyll is sufficient. 1. Open [localhost:4000](http://localhost:4000/) in your browser. -#### Starting and inspecting edits with Puma +#### Edit with Puma -For more programmatical PRs (such as handling webhooks notification -via POST), Puma is necessary. +For more programmatical pull requests (such as handling webhooks notifications +via POST), Puma is necessary. To start and inspect your edits using Puma, follow the steps below: -1. Run Puma server: +1. Run the *Puma* server: ```sh-session $ ./bin/puma @@ -64,6 +95,10 @@ via POST), Puma is necessary. 1. Open [localhost:9292](http://localhost:9292/) in your browser. +### API Documentation + +All Travis CI API V2 (and 2.1) documentation is maintained in `slate/source` and generated from the source at build time. + ## License -Distributed under the [MIT license](https://opensource.org/licenses/MIT); the same as other Travis CI projects. +Distributed under the [MIT license](https://opensource.org/licenses/MIT), like other Travis CI projects. diff --git a/Rakefile b/Rakefile old mode 100644 new mode 100755 index e6ab4aa943a..ad69819b662 --- a/Rakefile +++ b/Rakefile @@ -1,126 +1,232 @@ #!/usr/bin/env rake +# frozen_string_literal: true -require 'html-proofer' +abort('Please run this using `bundle exec rake`') unless ENV["BUNDLE_BIN_PATH"] -task :default => [:test] +require 'ipaddr' +require 'json' +require 'yaml' +require 'netrc' +require 'erb' +require 'openssl' -desc 'Runs the tests!' -task :test => :build do - Rake::Task['run_html_proofer'].invoke +require 'faraday' +require 'html-proofer' + +def print_line_containing(file, str) + File.open(file).grep(/#{str}/).each { |line| puts "#{file}: #{line}" } end -desc 'Builds the site' -task :build => [:remove_output_dir, :gen_trusty_image_data, :gen_gce_ip_addr_range] do - FileUtils.rm '.jekyll-metadata' if File.exist?('.jekyll-metadata') - sh 'bundle exec jekyll build --config=_config.yml' +def dns_resolve(hostname, rectype: 'A') + JSON.parse( + Faraday.get("https://dnsjson.com/#{hostname}/#{rectype}.json").body + ).fetch('results').fetch('records') end -desc 'Remove the output dir' -task :remove_output_dir do - FileUtils.rm_r('_site') if File.exist?('_site') +def define_ip_range(nat_hostname, dest) + data = dns_resolve(nat_hostname) + + bytes = File.write( + dest, + YAML.dump( + 'host' => nat_hostname, + 'ip_range' => data.sort { |a, b| IPAddr.new(a) <=> IPAddr.new(b) } + ) + ) + + puts "Updated #{dest} (#{bytes} bytes)" end -def print_line_containing(file, str) - File.open(file).grep(/#{str}/).each do |line| puts "#{file}: #{line}" end +task default: :test + +desc 'Runs the tests!' +task test: %i[build run_html_proofer] + +desc 'Builds the site (Jekyll and Slate)' +task build: %i[regen make_api update_lang_vers] do + rm_f '.jekyll-metadata' + sh 'bundle exec jekyll build --config=_config.yml' end desc 'Lists files containing beta features' task :list_beta_files do files = FileList.new('**/*.md') - files.exclude("_site/*", "STYLE.md") - for f in files do + files.exclude('_site/*', 'STYLE.md') + files.each do |f| print_line_containing(f, '\.beta') end end -desc 'Runs the html-proofer test' -task :run_html_proofer do - # seems like the build does not render `%3*`, - # so let's remove them for the check - url_swap = { - /%3A\z/ => '', - /%3F\z/ => '', - /-\.travis\.yml/ => '-travisyml' - } +desc 'Stage API output into _site for HTML-Proofer' +task :stage_api => [:make_api] do + mkdir_p '_site/api' + sh 'cp -a api/. _site/api/' +end - tester = HTMLProofer.check_directory('./_site', { - :url_swap => url_swap, - :internal_domains => ["docs.travis-ci.com"], - :connecttimeout => 600, - :only_4xx => true, - :typhoeus => { :ssl_verifypeer => false, :ssl_verifyhost => 0, :followlocation => true }, - :url_ignore => ["https://www.appfog.com/", /itunes\.apple\.com/, /coverity.com/, /articles201769485/], - :file_ignore => ["./_site/api/index.html", "./_site/user/languages/erlang/index.html"] - }) - tester.run -end - -desc 'Runs the html-proofer test for internal links only' -task :run_html_proofer_internal do - # seems like the build does not render `%3*`, - # so let's remove them for the check - url_swap = { - /%3A\z/ => '', - /%3F\z/ => '', - /-\.travis\.yml/ => '-travisyml' +desc 'Check links and validate some html' +task :run_html_proofer => [:build, :stage_api] do + options = { + internal_domains: ['docs.travis-ci.com'], + check_external_hash: false, + check_internal_hash: false, + check_html: false, + disable_external: true, + connecttimeout: 600, + allow_hash_ref: true, + #only_4xx: true, + typhoeus: { + ssl_verifypeer: false, ssl_verifyhost: 0, followlocation: true + }, + url_ignore: [ + /itunes\.apple\.com/, + /^https?:\/\/developer\.travis-ci\.com/, + /^https?:\/\/travis-ci\.com/, + /(^|\W)developer\.travis-ci\.com(\W|$)/, + /(^|\W)travis-ci\.com(\W|$)/, + /\/user\/billing-overview\.md$/, + /\/user\/storage-addon\/?$/, + /user\/build-stages$/ + ], + file_ignore: [ + './_site/api/index.html', + %r{^\./_site/api/fonts/}, + %r{^\./_site/assets/stylesheets/.*\.css\.map$}, + %r{^\./_site/assets/javascripts/.*\.map$}, + %r{^\./_site/assets/javascripts/tablefilter/}, + './_site/user/angular/index.html', + './_site/user/bower/index.html', + './_site/user/vagrant/index.html', + './_site/user/travis-ci-vcs-proxy/index.html', + './_site/user/build-config-yaml/index.html' + ], + :cache => { + :timeframe => '3w' + } } + begin + HTMLProofer.check_directory( './_site', options).run + rescue => msg + puts "#{msg}" + end +end - tester = HTMLProofer.check_directory('./_site', { - :url_swap => url_swap, - :disable_external => true, - :internal_domains => ["docs.travis-ci.com"], - :connecttimeout => 600, - :only_4xx => true, - :typhoeus => { :ssl_verifypeer => false, :ssl_verifyhost => 0, :followlocation => true }, - :file_ignore => ["./_site/api/index.html", "./_site/user/languages/erlang/index.html"] - }) - tester.run +file '_data/ip_range.yml' do |t| + define_ip_range('nat.travisci.net', t.name) end -desc 'Populate Trusty image table data' -task :gen_trusty_image_data do - GENERATED_LANGUAGE_MAP_JSON_FILE = 'https://raw.githubusercontent.com/travis-infrastructure/terraform-config/master/aws-production-2/generated-language-mapping.json' +file '_data/ec2_ip_range.yml' do |t| + define_ip_range('nat.aws-us-east-1.travisci.net', t.name) +end - fail unless sh "curl -OsSfL '#{GENERATED_LANGUAGE_MAP_JSON_FILE}'" +file '_data/gce_ip_range.yml' do |t| + define_ip_range('nat.gce-us-central1.travisci.net', t.name) +end - json_data = JSON.load(File.read(File.basename(GENERATED_LANGUAGE_MAP_JSON_FILE))) - yaml_data = json_data.to_yaml +file '_data/gce_ip_ue1_range.yml' do |t| + define_ip_range('nat.gce-us-east1.travisci.net', t.name) +end - File.write(File.join(File.dirname(__FILE__), '_data', 'trusty_mapping_data.yml'), yaml_data) +file '_data/linux_containers_ip_range.yml' do |t| + define_ip_range('nat.linux-containers.travisci.net', t.name) end -desc 'Populate GCE IP address range' -task :gen_gce_ip_addr_range do - require 'ipaddr' +file '_data/macstadium_ip_range.yml' do |t| + define_ip_range('nat.macstadium-us-se-1.travisci.net', t.name) +end - # Using steps described in https://cloud.google.com/compute/docs/faq#where_can_i_find_short_product_name_ip_ranges - # we populate the range of IP addresses for GCE instances +file '_data/node_js_versions.yml' do |t| + sh 'test -f $HOME/.nvm/nvm.sh || (curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash)' + remote_node_versions = `bash -l -c "source $HOME/.nvm/nvm.sh; nvm ls-remote"`.split("\n"). + map {|l| l.gsub(/.*v(0\.[0-9]*|[0-9]*)\..*$/, '\1')}.uniq. + sort {|a,b| Gem::Version.new(b) <=> Gem::Version.new(a) } + + bytes = File.write( + t.name, + YAML.dump( + remote_node_versions.flatten.compact.take(5) + ) + ) + puts "Updated #{t.name} (#{bytes} bytes)" +end - GOOGLE_DNS_SERVER='8.8.8.8' - DNS_ROOT='_cloud-netblocks.googleusercontent.com' +desc 'Refresh generated files' +task regen: (%i[clean] + %w[ + _data/ec2_ip_range.yml + _data/gce_ip_range.yml + _data/gce_ip_ue1_range.yml + _data/ip_range.yml + _data/linux_containers_ip_range.yml + _data/macstadium_ip_range.yml + _data/node_js_versions.yml + user/notifications.md +] + %i[update_lang_vers]) + +desc 'Remove generated files' +task :clean do + rm_f(%w[ + _data/ec2_ip_range.yml + _data/gce_ip_range.yml + _data/gce_ip_ue1_range.yml + _data/ip_range.yml + _data/linux_containers_ip_range.yml + _data/macstadium_ip_range.yml + _data/node_js_versions.yml + _data/language-details/*-versions.yml + ]) + rm_rf('assets/javascripts/tablefilter') + rm_rf('_site') + rm_rf('api/*') + rm_rf('user/notifications.md') +end - root_answer=`nslookup -q=TXT _cloud-netblocks.googleusercontent.com #{GOOGLE_DNS_SERVER}` +desc 'Start Jekyll server' +task serve: [:make_api, :regen] do + sh 'bundle exec jekyll serve --config=_config.yml' +end - blocks=[] +namespace :assets do + task precompile: [:make_api, :build] +end - root_answer.split.grep(/^include:/).map {|x| x.sub(/^include:/,'')}.each do |netblock_host| - block_answer = `nslookup -q=TXT #{netblock_host} #{GOOGLE_DNS_SERVER}` - blocks += block_answer.split.grep(/^ip4:/).map {|x| x.sub(/^ip4:/,'')} - end +desc 'make API docs' +task :make_api do + sh 'bundle exec middleman build --clean' +end - blocks_sorted = blocks.sort do |a,b| - IPAddr.new(a) <=> IPAddr.new(b) +LANG_ARCHIVE_HOST='language-archives.travis-ci.com' +TABLEFILTER_SOURCE_PATH='assets/javascripts/tablefilter/dist/tablefilter/tablefilter.js' + +desc 'update language archive versions' +task :update_lang_vers => [TABLEFILTER_SOURCE_PATH] do + definitions = YAML.load_file('_data/language-details/archive_definitions.yml') + definitions.each do |lang, defs| + sh "curl" \ + " -H \"Accept: application/x-yaml\"" \ + " https://#{LANG_ARCHIVE_HOST}/builds/#{lang}/#{defs.fetch("prefix","ubuntu")}", + :out => "_data/language-details/#{lang}-versions.yml" end - - File.write(File.join(File.dirname(__FILE__), '_data', 'gce_ip_range.yml'), blocks_sorted.map {|ip| "`#{ip}`"}.join(", ").to_yaml) end -desc 'Start Jekyll server' -task :serve => [:gen_trusty_image_data] do - sh "bundle exec jekyll serve --config=_config.yml" +desc "Add TableFilter" +file TABLEFILTER_SOURCE_PATH do + sh "git", "clone", "--depth=1", "https://github.com/koalyptus/TableFilter.git", "assets/javascripts/tablefilter" end -namespace :assets do - task :precompile => [:build] do +desc 'Update notifications ciphers' +file 'user/notifications.md' do + line_length = 80 + ciphers = OpenSSL::Cipher.ciphers.sort.map(&:upcase) + x = [] + while !ciphers.empty? do + row = [] + while row.join(" ").length < line_length do + row << ciphers.shift + end + ciphers.unshift row.pop unless ciphers.empty? + x << row.compact.join(" ") end + @ciphers_list = x.join("\n") + renderer = ERB.new(File.read('user/notifications.md.erb')) + f = File.new('user/notifications.md', 'w') + f.write renderer.result(binding) end diff --git a/STYLE.md b/STYLE.md index 655ef50ab47..e972d86259c 100644 --- a/STYLE.md +++ b/STYLE.md @@ -1,6 +1,6 @@ -# Travis CI documentation style guide +# Travis CI Documentation Style Guide -## Markdown and structure +## Markdown and Structure We're planning to lint the Markdown with [Coala.io][coala] and the [MarkdownBear][bear]. @@ -12,11 +12,13 @@ We'll be using a subset (TBD) of the full [list of checks][checks]. [checks]: https://github.com/coala/bear-docs/blob/master/docs/MarkdownBear.rst#settings "MarkdownBear checks" -### Headings +We use Kramdown, with [GFM](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) code blocks, and a few Kramdown-related exceptions introduced with `{: }` such as class names for specific formatting of columns and notes. -For historical reasons, the top level heading in Jekyll markdown files is level 2 (##) not level 1 (#). +## Headings -We use ATX style headings, and do not use the optional closing hashes: +For historical reasons, the top-level heading in Jekyll's markdown files is level 2 (##), not level 1 (#). Only the page’s title is a level 1 heading. + +We use ATX-style headings and do not use the optional closing hashes: ```markdown ## This is an H2 @@ -26,16 +28,16 @@ We use ATX style headings, and do not use the optional closing hashes: #### This is an H4 ``` -We do not use underline style headings: +We do not use underlined style headings: ```markdown Do not use this style heading ============================= ``` -### Lists +## Lists -If you have long lists you can wrap them into 2 (`.column-2`) or 3 (`.column-3`) columns using one of the follow CSS classes after your list item: +If you have long lists, you can wrap them into 2 (`.column-2`) or 3 (`.column-3`) columns using one of the following CSS classes after your list item: ```css * long list item 1 @@ -43,59 +45,64 @@ If you have long lists you can wrap them into 2 (`.column-2`) or 3 (`.column-3`) {: .column-2 } ``` -### TOC +## Links + +Make sure all links have titles: -Add a table of contents to a page with the following HTML snippet: +```markdown +The [link][example1] in the text -```html -
+[example1]: http://www.example.com "Example URL" ``` -### Beta features +or -Mark all beta features with a specially formatted note. Both the `> BETA` and -the `{: beta}` are required. +```markdown +The [link](http://www.example.com "Example URL") in the text +``` -> BETA Awesome new feature that might not be enabled and is subject to change. -{: .beta} +When linking internal pages, use absolute paths and trailing slashes: `/user/languages/c/`. +You can link to headings and remember to remove special characters, for example: -### Alpha features +To link to "##Node.js Page," use `#nodejs-page`. -Mark all alpha features with a specially formatted note. Both the `> ALPHA` and -the `{: alpha}` are required. -> ALPHA Awesome new feature that might explode for extra fun. -{: .alpha} +## In-page Options -### GUI +### Notes, warnings, and blocks -Make sure all references to items in a GUI match the case of the UI, and are marked with *asterisks*. +Travis CI uses the blockquote symbol `>` for general-purpose notes and warnings. -### Links +See an example below: -Make sure all links have titles: +> Note: This feature is only available in Version 2.0. -```markdown -The [link][example1] in the text +### Beta features -[example1]: http://www.example.com "Example URL" -``` +Mark all beta features with a specially formatted note. Both the `> BETA` and +the `{: .beta}` are required. -or +See an example below: -```markdown -The [link](http://www.example.com "Example URL") in the text -``` +> BETA Awesome new feature that might not be enabled and is subject to change. +{: .beta} -When linking internal pages, use absolute paths and trailing slashes: `/user/languages/c/`. -You can link to headings, remember to remove special characters, for example: +#### Alpha features + +Mark all alpha features with a specially formatted note. Both the `> ALPHA` and +the `{: alpha}` are required. -To link to "##Node.js Page" use `#nodejs-page`. +> ALPHA: Awesome new feature that might explode for extra fun. +{: .alpha} + +### GUI + +Ensure all references to items in a GUI match the case of the UI and are marked with *asterisks*. ### Code Inline -All function names, filenames, etc should be marked with `back-ticks`. +All function names, filenames, etc., should be marked with `back-ticks`. If you're talking about applications or services, only the actual command should be marked as code, not the name of the service: @@ -103,7 +110,7 @@ If you're talking about applications or services, only the actual command should ### Blockquotes / Notes / Warnings -As we have no use for blockquotes we use `>` to indicate notes and warnings: +As we have no use for blockquotes, we use `>` to indicate notes and warnings: ```markdown > Note this important info! @@ -127,10 +134,62 @@ This code is in .travis.yml ``` {: data-file=".travis.yml"} +### In-page table of contents +All Travis CI pages have tables of contents generated automatically from H2 and H3 -### Common misspellings and words to avoid +Add `no_toc: true` to the frontmatter to remove the TOC from a page. + +### Terminology +The following are some common misspellings and words to avoid - Always refer to *Travis CI* and never to Travis. ## Images + +Add images inline-style with a brief description. + +To add an image, follow these steps: +1 Capture the image. +2 Save the image in the `images/` path. +3 Add the image to the documentation as follows: +![description text](image path or URL) + +### Screencapture gifs + +1. Run a build (or whatever you are trying to capture), +2. Capture it with [licecap](https://www.cockos.com/licecap/). +3. Save the gif in the following path: `images/` + + +## Documentation Template + +A basic template for contributing to new documentation pages or sections is as follows: + +```markdown +--- +title: “Insert Page Title” +layout: en + +--- + +Start your introduction here. Usually, an introduction is between one and three sentences. + +## Section Heading + +Section introduction sentence. + +* **Item1** - a group of *jobs* that run in sequence. +* **Item2** - a group of *jobs* that run in parallel as part of a sequential *build* process composed of multiple [stages](/user/build-stages/). +* **Item3** - an automated process that clones your repository into a virtual + environment and then carries out a series of *phases* such as compiling your + code, running tests, etc. +* **Item4** - the [sequential steps](/user/job-lifecycle/) + of a *job*. + +``` +{: data-file=".travis.yml"} + +The example above shows a paragraph with different formatting options. + +Check out the [Travis CI documentation](https://docs.travis-ci.com/) for more examples. diff --git a/_config.yml b/_config.yml index 624d19d588c..89a5959dfd0 100644 --- a/_config.yml +++ b/_config.yml @@ -2,7 +2,7 @@ title: "Travis CI Documentation" email: "support@travis-ci.com" url: "https://docs.travis-ci.com" docs_github: "https://github.com/travis-ci/docs-travis-ci-com/" -exclude: [bin, CNAME, Gemfile, Gemfile.lock, README.md, slate, vendor, '*.erb'] +exclude: [bin, CNAME, Gemfile, Gemfile.lock, README.md, slate, vendor, '*.erb', 'config.rb'] markdown: kramdown permalink: :/title/ syntax-highlighting: @@ -11,9 +11,8 @@ kramdown: hard_wrap: false input: GFM smart_quotes: lsquo,rsquo,ldquo,rdquo -gems: - - jekyll-redirect-from -whitelist: +plugins: - jekyll-redirect-from sass: sass_dir: assets/stylesheets + sourcemap: never diff --git a/_data/databases.yml b/_data/databases.yml deleted file mode 100644 index ec915471d9a..00000000000 --- a/_data/databases.yml +++ /dev/null @@ -1,14 +0,0 @@ -MySQL: "#MySQL" -SQLite3: "#SQLite3" -PostgreSQL: "#PostgreSQL" -MariaDB: "#MariaDB" -SQLite3: "#SQLite3" -MongoDB: "#MongoDB" -CouchDB: "#CouchDB" -Redis: "#Redis" -Riak: "#Riak" -RabbitMQ: "#RabbitMQ" -Memcached: "#Memcached" -Cassandra: "#Cassandra" -Neo4j: "#Neo4j" -ElasticSearch: "#ElasticSearch" diff --git a/_data/deployments.yml b/_data/deployments.yml index 1a392c7208d..339e90983bc 100644 --- a/_data/deployments.yml +++ b/_data/deployments.yml @@ -1,5 +1,4 @@ anynines: "/user/deployment/anynines/" -Appfog: "/user/deployment/appfog/" Atlas: "/user/deployment/atlas/" AWS CodeDeploy: "/user/deployment/codedeploy/" AWS Elastic Beanstalk: "/user/deployment/elasticbeanstalk/" @@ -12,10 +11,10 @@ BitBalloon: "/user/deployment/bitballoon/" Bluemix CloudFoundry: "/user/deployment/bluemixcloudfoundry/" Boxfuse: "/user/deployment/boxfuse/" Catalyze: "/user/deployment/catalyze/" -Chef Supermarket: "/user/deployment/chefsupermarket" +Chef Supermarket: "/user/deployment/chefsupermarket/" Cloud 66: "/user/deployment/cloud66/" CloudFoundry: "/user/deployment/cloudfoundry/" -Deis: "/user/deployment/deis/" +Cargo: "/user/deployment/cargo/" Engine Yard: "/user/deployment/engineyard/" GitHub Pages: "/user/deployment/pages/" GitHub Releases: "/user/deployment/releases/" @@ -23,9 +22,9 @@ Google App Engine: "/user/deployment/google-app-engine/" Google Cloud Storage: "/user/deployment/gcs/" Google Firebase: "/user/deployment/firebase/" Hackage: "/user/deployment/hackage/" +Hephy: "/user/deployment/hephy/" Heroku: "/user/deployment/heroku/" Launchpad: "/user/deployment/launchpad/" -Modulus: "/user/deployment/modulus/" npm: "/user/deployment/npm/" OpenShift: "/user/deployment/openshift/" packagecloud.io: "/user/deployment/packagecloud/" @@ -35,5 +34,7 @@ Rackspace Cloud Files: "/user/deployment/cloudfiles/" RubyGems: "/user/deployment/rubygems/" Scalingo: "/user/deployment/scalingo/" Script: "/user/deployment/script/" +Snap Store: "/user/deployment/snaps/" Surge.sh: "/user/deployment/surge/" TestFairy: "/user/deployment/testfairy/" +Transifex: "/user/deployment/transifex/" diff --git a/_data/deployments_v2.yml b/_data/deployments_v2.yml new file mode 100644 index 00000000000..1b7c4017bfb --- /dev/null +++ b/_data/deployments_v2.yml @@ -0,0 +1,42 @@ +anynines: "/user/deployment-v2/providers/anynines/" +AWS CloudFormation: "/user/deployment-v2/providers/cloudformation/" +AWS CodeDeploy: "/user/deployment-v2/providers/codedeploy/" +AWS Elastic Beanstalk: "/user/deployment-v2/providers/elasticbeanstalk/" +AWS Lambda: "/user/deployment-v2/providers/lambda/" +AWS OpsWorks: "/user/deployment-v2/providers/opsworks/" +AWS S3: "/user/deployment-v2/providers/s3/" +Azure Web Apps: "/user/deployment-v2/providers/azure-web-apps/" +Bintray: "/user/deployment-v2/providers/bintray/" +Bluemix CloudFoundry: "/user/deployment-v2/providers/bluemixcloudfoundry/" +Boxfuse: "/user/deployment-v2/providers/boxfuse/" +Cargo: "/user/deployment-v2/providers/cargo/" +Chef Supermarket: "/user/deployment-v2/providers/chefsupermarket/" +Cloud 66: "/user/deployment-v2/providers/cloud66/" +Cloud Foundry: "/user/deployment-v2/providers/cloudfoundry/" +Convox: "/user/deployment-v2/providers/convox/" +Datica: "/user/deployment-v2/providers/datica/" +Engine Yard: "/user/deployment-v2/providers/engineyard/" +GitHub Pages: "/user/deployment-v2/providers/pages/" +GitHub Releases: "/user/deployment-v2/providers/releases/" +Gleis: "/user/deployment-v2/providers/gleis/" +Google App Engine: "/user/deployment-v2/providers/google-app-engine/" +Google Cloud Storage: "/user/deployment-v2/providers/gcs/" +Google Firebase: "/user/deployment-v2/providers/firebase/" +Hackage: "/user/deployment-v2/providers/hackage/" +Hephy: "/user/deployment-v2/providers/hephy/" +Heroku: "/user/deployment-v2/providers/heroku/" +Launchpad: "/user/deployment-v2/providers/launchpad/" +NPM: "/user/deployment-v2/providers/npm/" +Netlify Drop: "/user/deployment-v2/providers/netlify/" +OpenShift: "/user/deployment-v2/providers/openshift/" +packagecloud: "/user/deployment-v2/providers/packagecloud/" +Puppet Forge: "/user/deployment-v2/providers/puppetforge/" +PyPI: "/user/deployment-v2/providers/pypi/" +Rackspace Cloud Files: "/user/deployment-v2/providers/cloudfiles/" +RubyGems: "/user/deployment-v2/providers/rubygems/" +Scalingo: "/user/deployment-v2/providers/scalingo/" +Script: "/user/deployment-v2/providers/script/" +Snap Store: "/user/deployment-v2/providers/snap/" +Surge.sh: "/user/deployment-v2/providers/surge/" +TestFairy: "/user/deployment-v2/providers/testfairy/" +Transifex: "/user/deployment-v2/providers/transifex/" diff --git a/_data/enterprise.yml b/_data/enterprise.yml deleted file mode 100644 index e39ac7c9081..00000000000 --- a/_data/enterprise.yml +++ /dev/null @@ -1,8 +0,0 @@ -System Prerequisites: "/user/enterprise/prerequisites/" -Installation: "/user/enterprise/installation/" -Upgrading: "/user/enterprise/upgrading/" -Customizing Build Images: "/user/enterprise/build-images/" -Worker Configuration: "/user/enterprise/worker-configuration/" -Worker Start & Debug Containers: "/user/enterprise/worker-cli-commands/" -Platform Administration Tips: "/user/enterprise/platform-tips/" -Trusty Build Containers (BETA): "/user/enterprise/trusty/" \ No newline at end of file diff --git a/_data/language-details/archive_definitions.yml b/_data/language-details/archive_definitions.yml new file mode 100644 index 00000000000..d282958269c --- /dev/null +++ b/_data/language-details/archive_definitions.yml @@ -0,0 +1,3 @@ +python: {} +erlang: {} +php: {} diff --git a/_data/language-details/perl.yml b/_data/language-details/perl.yml new file mode 100644 index 00000000000..f5e41c5e250 --- /dev/null +++ b/_data/language-details/perl.yml @@ -0,0 +1,26 @@ +threading: | + Some Perls have been compiled with threading support. They have been compiled + with the additional compile flags `-Duseshrplib` and `-Duseithreads`: + + ``` + 5.26-shrplib + 5.24-shrplib + 5.22-shrplib + 5.20-shrplib + 5.18-shrplib + ``` +modules: | + ``` + cpanm (App::cpanminus) + Dist::Zilla + Dist::Zilla::Plugin::Bootstrap::lib + ExtUtils::MakeMaker + LWP + Module::Install + Moose + Test::Exception + Test::Kwalitee + Test::Most + Test::Pod + Test::Pod::Coverage + ``` diff --git a/_data/languages.yml b/_data/languages.yml index ba60f751e23..45312105358 100644 --- a/_data/languages.yml +++ b/_data/languages.yml @@ -6,9 +6,11 @@ Clojure: "/user/languages/clojure/" Crystal: "/user/languages/crystal/" D: "/user/languages/d/" Dart: "/user/languages/dart/" -Erlang: "/user/languages/erlang/" Elixir: "/user/languages/elixir/" +Elm: "/user/languages/elm/" +Erlang: "/user/languages/erlang/" F#: "/user/languages/csharp/" +Generic: "/user/languages/minimal-and-generic/" Go: "/user/languages/go/" Groovy: "/user/languages/groovy/" Haskell: "/user/languages/haskell/" @@ -16,8 +18,9 @@ Haxe: "/user/languages/haxe/" Java: "/user/languages/java/" JavaScript (with Node.js): "/user/languages/javascript-with-nodejs/" Julia: "/user/languages/julia/" +MATLAB: "/user/languages/matlab/" +Minimal: "/user/languages/minimal-and-generic/" Nix: "/user/languages/nix/" -Objective-C: "/user/languages/objective-c/" Perl: "/user/languages/perl/" Perl6: "/user/languages/perl6/" PHP: "/user/languages/php/" @@ -27,5 +30,4 @@ Ruby: "/user/languages/ruby/" Rust: "/user/languages/rust/" Scala: "/user/languages/scala/" Smalltalk: "/user/languages/smalltalk/" -Swift: "/user/languages/objective-c/" Visual Basic: "/user/languages/csharp/" diff --git a/_data/snippets.yml b/_data/snippets.yml index 553d2542c34..624f3962d43 100644 --- a/_data/snippets.yml +++ b/_data/snippets.yml @@ -2,7 +2,7 @@ conditional_deploy: | ### Conditional Deploys You can deploy only when certain conditions are met. - See [Conditional Releases with `on:`](/user/deployment#Conditional-Releases-with-on%3A). + See [Conditional Releases with `on:`](/user/deployment#conditional-releases-with-on). before_and_after: | ### Running commands before and after deploy @@ -18,19 +18,195 @@ before_and_after: | ``` ghlimit: | > If your API or cron triggered builds run on the *same commit - > or branch* over and over again, you will notice GitHub have a limit of + > or branch* over and over again, you will notice GitHub has a limit of > [1000 status updates](https://developer.github.com/v3/repos/statuses/#create-a-status) - > *per commit*, which causes the Travis CI build status displayed on GitHub - > to be incorrect. + > *per commit*, which causes the Travis CI build status to display incorrectly + > on GitHub. > Avoid this problem by specifying a regularly updated branch for your automated builds. -trusty_note: | - > Language versions and other build-environment specific - > information are in our reference pages: +all_note: | + > For Language versions and other build-environment specific + > information visit our reference pages: > * [Precise](/user/reference/precise/) > * [Trusty](/user/reference/trusty/) - > * [OS X](/user/reference/osx/) -trusty_note_no_osx: | - > Language versions and other build-environment specific - > information are in our reference pages: + > * [Xenial](/user/reference/xenial/) + > * [Bionic](/user/reference/bionic/) + > * [Focal](/user/reference/focal/) + > * [Jammy](/user/reference/jammy/) + > * [Noble](/user/reference/noble/) + > * [macOS](/user/reference/osx/) + > * [Windows](/user/reference/windows/) + > * [FreeBSD](/user/reference/freebsd/) +unix_note: | + > For Language versions and other build-environment specific + > information visit our reference pages: > * [Precise](/user/reference/precise/) > * [Trusty](/user/reference/trusty/) + > * [Xenial](/user/reference/xenial/) + > * [Bionic](/user/reference/bionic/) + > * [Focal](/user/reference/focal/) + > * [Jammy](/user/reference/jammy/) + > * [Noble](/user/reference/noble/) + > * [macOS](/user/reference/osx/) + > * [FreeBSD](/user/reference/freebsd/) +linux_note: | + > For Language versions and other build-environment specific + > information visit our reference pages: + > * [Precise](/user/reference/precise/) + > * [Trusty](/user/reference/trusty/) + > * [Xenial](/user/reference/xenial/) + > * [Bionic](/user/reference/bionic/) + > * [Focal](/user/reference/focal/) + > * [Jammy](/user/reference/jammy/) + > * [Noble](/user/reference/noble/) +linux_windows_note: | + > For Language versions and other build-environment specific + > information visit our reference pages: + > * [Precise](/user/reference/precise/) + > * [Trusty](/user/reference/trusty/) + > * [Xenial](/user/reference/xenial/) + > * [Bionic](/user/reference/bionic/) + > * [Focal](/user/reference/focal/) + > * [Jammy](/user/reference/jammy/) + > * [Noble](/user/reference/noble/) + > * [Windows](/user/reference/windows/) + > * [FreeBSD](/user/reference/freebsd/) +concurrent_jobs: | + The maximum number of concurrent jobs depends on the total system load, but + one situation in which you might want to set a particular limit is: + + - if your build depends on an external resource and might run into a race + condition with concurrent jobs. +enabling_access_jobs_logs: | + This setting allows you to increase security by preventing access to old job logs older than 360 days. Or, in the case of a necessity, users can explicitly enable access to public and private old job log repositories. + + The following are the available configurations: + * If this setting is ON, it enables access to build job logs older than 365 days. + * If this setting is OFF, access to build job logs older than 365 days is unavailable via UI or API calls. +limiting_access_jobs_logs: | + Similarly, this setting allows you to restrict access to build job logs for any user without write/push access rights to the repository. Limit job log visibility to only those that needed it. Enable this setting and ensure job logs are only available to users with respective read or write access to the individual repository. + + The following are the available configurations: + * If this setting is ON, it allows access to build job logs only for users with write/push permissions to this repository. Limits access to build job logs via UI and API. + * If this setting is OFF, users with read access to the repository can access the build job logs. + + Please note that the '*Limiting access to build job logs*' repository setting applies only to users with ‘write/push’ permissions. +auto_cancellation: | + If you are only interested in building the most recent commit on each branch you can use this new feature to automatically cancel older builds that are in the **queued** state and are not yet running. +cron_jobs: | + Travis CI cron jobs work similarly to the cron utility; they run builds at regular scheduled intervals independently of whether any commits were pushed to the repository. Cron jobs always fetch the most recent commit on a particular branch and build the project at that state. Cron jobs can run `daily`, `weekly` or `monthly`, which in practice means up to an hour after the selected time span, and you cannot set them to run at a specific time. +environment_variables: | + Variables defined in repository settings are the same for all builds, and when you restart an old build, it uses the latest values. These variables are not automatically available to forks. + + Define variables in the Repository Settings that: + + - differ per repository. + - contain sensitive data, such as third-party credentials. +contact_enterprise_support: | + To get in touch with us, please write a message to + [enterprise@travis-ci.com](mailto:enterprise@travis-ci.com). If possible, + please include as much of the following as you can: + + - Description of the problem - what are you observing? + - Which steps did you try already? + - A support bundle (see table below on how to obtain it) + - Log files from all workers (They can be found at `/var/log/upstart/travis-worker.log` - please include as many as you can retrieve). + - If a build failed or errored, a text file of the build log + + | TCI Enterprise version | Support bundle | + | :--- | :--- | + | **3.x** | Run `kubectl kots admin-console -n [namespace]` to access admin console on `http://localhost:8800`
Support bundle generation instruction is available in ‘troubleshoot’ menu or directly at: `http://localhost:8800/app/tci-enterprise-kots/troubleshoot`

A command for generating support bundle will appear after selecting:
`If you'd prefer, [click here]() to get a command to manually generate a support bundle.` | + | **2.x+** | You can get it from `https://:8800/support` | + + Since the announcement in Q3 2020, the most up to date version of Travis CI Enterprise is 3.x line. + There are not any new releases for version 2.2 and the support patches has been limited since March 2021 as well. + For existing users of Travis CI 2.x we strongly recommend upgrading to the latest Travis CI Enterprise 3.x. + + Have you made any customizations to your setup? While we may be able to see some + information (such as hostname, IaaS provider, and license expiration), there + are many other things we cannot see which could lead to something not working. + Therefore, we would like to ask you to also answer the questions below in your + support request (if applicable): + + - How many machines are you using / what is your Kubernetes cluster setup? + - Do you use configuration management tools (Chef, Puppet)? + - Which other services do interface with Travis CI Enterprise? + - Which Version Control system (VCS) do you use together with Travis CI Enterprise (e.g. github.com, GitHub Enterprise, or BitBucket Cloud)? + - If you are using GitHub Enterprise, which version of it? + + We are looking forward to helping! +enterprise_2_encryption_key_backup: | + To make a backup of encryption keys in TCIE 2.x, please follow these steps: + + 1. Open an SSH connection to the platform machine. + 2. Open a bash session with `root` privileges on the Travis CI container by running `travis bash`. + 3. Run the following command to obtain the key: `grep -A1 encryption: /usr/local/travis/etc/travis/config/travis.yml`. + 4. Create a backup of the value returned by the previous command by either writing it down on a piece of paper or storing it on a different computer. +enterprise_3_encryption_key_backup: | + To make a backup of encryption keys in TCIE 3.x, please follow these steps: + + 1. Make sure you have appropriate access to the kubernetes cluster: you need credentials for `kubectl` and connection to [travis-api-pod] + 2. Run `kubectl exec -it [travis-api-pod] cat /app/config/travis.yml |grep -A 2 encryption` (using Travis API pod is recommended). + 3. Create a backup of the value returned by that command by either writing it down on a piece of paper or storing it on a different computer. +github_oauth_access_rights: | + When you sign in to [travis-ci.com](https://travis-ci.com) using GitHub for the first time, you will receive a message from GitHub saying: + + > Travis CI by travis-pro wants to access your [account name] account. + + and in the repositories section it will state: + + > This application will be able to read and write all public and private repository data. + + This is not how Travis CI accesses your data, however we can explain it later in the process. + + The warning is triggered due to GitHub OAuth App permissions which Travis CI uses, and due to the available granularity of permission scopes (see GitHub [Scopes for OAuth Apps documentation](https://docs.github.com/en/developers/apps/scopes-for-oauth-apps) ). + + **Travis CI does not access all your repositories by default**. + + Once you acknowledge the access rights, you will see Travis CI OAuth application present in your GitHub [Authorized OAuth Apps list](https://github.com/settings/applications), however **you need to explicitly configure which repositories Travis CI has access to** within your [travis-ci.com](https://travis-ci.com) account. The configuration is done during the activation of Travis CI for your repositories. You can use either the 'All repositories' option or the 'Only select repositories' option during the activation process. + + When the Travis CI activation has completed, you will see the actual Travis CI GitHub Application installed in [Installed GitHub Apps](https://github.com/settings/installations) section. + + Travis CI uses OAuth permissions in the following way: + + 1) Travis CI's system synchronizes certain metadata with GitHub. This metadata is required for proper service functioning. In particular, we sync users, orgs, memberships, repos, permissions and, (optionally) branches. This type of sync happens either once a day by schedule or per the user's request. You can find more information and source code [in this repository](https://github.com/travis-ci/travis-github-sync#syncs) + + 2) In order to run builds, Travis CI's system clones a repository, from which the build is triggered, to the build environment. The build environment is an isolated virtual machine or an LXD container, which gets terminated as soon as the build finishes. Cloning happens only after a build request, and therefore only for the repositories explicitly enabled at GitHub settings. + + 3) To set up a build environment and prepare the build, Travis CI's system fetches and processes the `.travis.yml` config file from the repository and the branch explicitly specified in the build request, triggered by GitHub. + + 4) Travis CI's system reports build results back to GitHub via its [Checks API](https://developer.github.com/v3/checks/). +git_repository_settings_forks_general: | + > Repository security settings for forked repositories on Git are available starting March 1st, 2022. + + For Git repositories, you may manage per repository how the [environment variables](/user/environment-variables/) and the [custom SSH keys](/user/private-dependencies/#user-key) will be handled in Travis CI when a build triggered as an effect of filing a Pull Request from a forked repository. Two settings are available specifically for this purpose, allowing you to customize your security vs. collaboration setup. + + * **base repository** - a Git repository, which is forked by someone else + * **fork** or **forked repository** - any Git repository forked from the **base repository** + * **PR** - Pull Request (e.g. in GitHub, BitBucket, GitLab) or Merge Request (in Assembla) + + > Please note: Repositories activated in [Travis CI](https://app.travis-ci.com ) before **March 1st, 2022** will have the `Share encrypted environment variables with forks (PRs) ` setting set to OFF. Please verify your collaboration model if necessary (especially for public repositories). The `Share SSH keys with forks (PRs)` will be set to ON for private repositories not to break too many collaboration setups. + Repository settings will be set by default to OFF for any repository activated in [Travis CI](https://app.travis-ci.com) after **March 1st, 2022**. For repositories activated in Travis CI after **March 1st, 2022**, you may want to consider changing the default settings depending on your collaboration model. +git_repository_settings_forks_encrypted_env_variables: | + ### Share encrypted environment variables with forks (PRs) + + This setting determines if the base repository´s encrypted environment variables will be shared with the forked repository in a fork-to-base pull request (the fork repository merges changes into the base repository). + + In the case of a base-to-base pull request (changes are merged from the **base repository** into itself), the encrypted environment variables will always be available. This allows collaborators to file Pull Requests using the repository encrypted environment variables and preserve existing checks configured, e.g. in GitHub. + + In the case of a fork-to-fork pull request (changes are merged from the **forked repository** into itself), the encrypted environment variables from the **base repository** will never be available. Therefore, one needs to replace or bypass them directly in **forked repository**. + + In the case of a fork-to-base pull request: + * If this setting is ON, the encrypted environment variables will be available to the forked repository, which means that builds in the **forked repository** will have access to the encrypted environment variables from the **base repository**. This may be a less secure approach yet allows for a collaboration using forks and Pull Requests (PRs). + * If this setting is OFF and the build relies on any encrypted environment variable, the PR from **fork** to **base repository** will fail. This secures your **base repository** encrypted environmental variables by putting a constraint on accessing them from **forks**. +git_repository_settings_forks_ssh_keys: | + ### Share SSH keys with forks (PRs) + + > Please Note: The ‘Share SSH keys with forks (PRs)’ repository setting is applicable only for private repositories in the [travis-ci.com](https://app.travis-ci.com) environment. + + This setting determines if the custom SSH keys from the **base repository** will be shared with the **forked repository** in a fork-to-base pull request (changes are merged from the fork repository into the base repository). In the case of a base-to-base pull request (changes are merged from the base repository into itself), the custom SSH keys will always be available. + + In the case of a fork-to-fork pull request (changes are merged from the forked repository into itself), the custom SSH keys from the base repository will never be available. + + In the case of a fork-to-base pull request: + * if this setting is ON, the custom SSH keys from the base repository will be available to the **forked repository**, which means that the build in the forked repository will be able to use the custom SSH keys from the base repository. Consider setting to ON if your collaboration model requires working with Pull Requests (PRs) from forked repositories or there are dependencies defined, which rely on SSH key from **base repository**. + * If this setting is OFF and the build is relying on custom SSH keys i.e. for fetching some additional dependencies, it will fail with a no access error. diff --git a/_data/xcodes.yml b/_data/xcodes.yml index 68911b57741..137a86ab198 100644 --- a/_data/xcodes.yml +++ b/_data/xcodes.yml @@ -1,17 +1,1112 @@ osx_images: - - image: xcode9.1 - xcode: "9.1" - osx_version: "10.12" - xcode_full_version: "9.1" - image_publish_date: 2017-10-04 + - image: xcode14.2 + xcode: "14.2" + osx_version: "12.6" + xcode_full_version: "14.2" + xcode_build_version: "14C18" + image_publish_date: 2023-01-06 + sdks: + - iphoneos16.2 + - iphonesimulator16.2 + - macosx13.1 + - appletvos16.1 + - appletvsimulator16.1 + - watchos9.1 + - watchsimulator9.1 + simulators: + - iOS 15.0 + - iOS 15.2 + - iOS 15.4 + - iOS 15.5 + - iOS 16.0 + - iOS 16.2 + - tvOS 14.5 + - tvOS 15.0 + - tvOS 15.2 + - tvOS 15.4 + - tvOS 16.0 + - tvOS 16.1 + - watchOS 7.4 + - watchOS 8.0 + - watchOS 8.3 + - watchOS 8.5 + - watchOS 9.0 + - watchOS 9.1 + jdk: "19.0.1" + - image: xcode14.1 + xcode: "14.1" + osx_version: "12.6" + xcode_full_version: "14.1" + xcode_build_version: "14B47b" + image_publish_date: 2022-11-11 + sdks: + - iphoneos16.0 + - iphonesimulator16.0 + - macosx12.3 + - appletvos16.0 + - appletvsimulator16.0 + - watchos9.0 + - watchsimulator9.0 + simulators: + - iOS 15.0 + - iOS 15.2 + - iOS 15.4 + - iOS 15.5 + - iOS 16.0 + - iOS 16.1 + - tvOS 14.5 + - tvOS 15.0 + - tvOS 15.2 + - tvOS 15.4 + - tvOS 16.0 + - tvOS 16.1 + - watchOS 7.4 + - watchOS 8.0 + - watchOS 8.3 + - watchOS 8.5 + - watchOS 9.0 + - watchOS 9.1 + jdk: "19.0.1" + - image: xcode14 + xcode: "14" + osx_version: "12.6" + xcode_full_version: "14.0.1" + xcode_build_version: "14A400" + image_publish_date: 2022-10-27 + sdks: + - iphoneos16.0 + - iphonesimulator16.0 + - macosx12.3 + - appletvos16.0 + - appletvsimulator16.0 + - watchos9.0 + - watchsimulator9.0 + simulators: + - iOS 14.5 + - iOS 15.0 + - iOS 15.2 + - iOS 15.4 + - iOS 15.5 + - iOS 16.0 + - tvOS 14.4 + - tvOS 14.5 + - tvOS 15.0 + - tvOS 15.2 + - tvOS 15.4 + - tvOS 16.0 + - watchOS 7.2 + - watchOS 7.4 + - watchOS 8.0 + - watchOS 8.3 + - watchOS 8.5 + - watchOS 9.0 + jdk: "19" + - image: xcode13.4 + xcode: "13.4" + osx_version: "12.4" + xcode_full_version: "13.4.1" + xcode_build_version: "13F100" + image_publish_date: 2022-06-08 + sdks: + - iphoneos15.5 + - iphonesimulator15.5 + - macosx12.3 + - appletvos15.4 + - appletvsimulator15.4 + - watchos8.5 + - watchsimulator8.5 + simulators: + - iOS 14.4 + - iOS 14.5 + - iOS 15.0 + - iOS 15.2 + - iOS 15.4 + - iOS 15.5 + - tvOS 14.3 + - tvOS 14.4 + - tvOS 14.5 + - tvOS 15.0 + - tvOS 15.2 + - tvOS 15.4 + - watchOS 7.2 + - watchOS 7.4 + - watchOS 8.0 + - watchOS 8.3 + - watchOS 8.5 + jdk: "18.0.1.1+0" + - image: xcode13.3 + xcode: "13.3" + osx_version: "12.3" + xcode_full_version: "13.2.1" + xcode_build_version: "13E113" + image_publish_date: 2022-03-23 + sdks: + - iphoneos15.4 + - iphonesimulator15.4 + - macosx12.3 + - appletvos15.4 + - appletvsimulator15.4 + - watchos8.5 + - watchsimulator8.5 + simulators: + - iOS 14.3 + - iOS 14.4 + - iOS 14.5 + - iOS 15.0 + - iOS 15.2 + - iOS 15.4 + - tvOS 14.3 + - tvOS 14.4 + - tvOS 14.5 + - tvOS 15.0 + - tvOS 15.2 + - tvOS 15.4 + - watchOS 7.2 + - watchOS 7.4 + - watchOS 8.0 + - watchOS 8.3 + - watchOS 8.5 + jdk: "17+35-2724" + - image: xcode13.2 + xcode: "13.2" + osx_version: "12.1" + xcode_full_version: "13.2.1" + xcode_build_version: "13C100" + image_publish_date: 2021-12-21 + sdks: + - iphoneos15.2 + - iphonesimulator15.2 + - macosx12.1 + - appletvos15.2 + - appletvsimulator15.2 + - watchos8.3 + - watchsimulator8.3 + simulators: + - iOS 14.0 + - iOS 14.1 + - iOS 14.2 + - iOS 14.3 + - iOS 14.4 + - iOS 14.5 + - iOS 15.0 + - tvOS 14.0 + - tvOS 14.2 + - tvOS 14.3 + - tvOS 14.4 + - tvOS 14.5 + - tvOS 15.0 + - watchOS 7.0 + - watchOS 7.1 + - watchOS 7.2 + - watchOS 7.4 + - watchOS 8.0 + jdk: "17+35-2724" + - image: xcode13.1 + xcode: "13.1" + osx_version: "11.6" + xcode_full_version: "13.1" + xcode_build_version: "13A1030d" + image_publish_date: 2021-10-22 + sdks: + - iphoneos14.5 + - iphonesimulator14.5 + - macosx11.3 + - appletvos14.5 + - appletvsimulator14.5 + - watchos7.4 + - watchsimulator7.4 + simulators: + - iOS 14.0 + - iOS 14.1 + - iOS 14.2 + - iOS 14.3 + - iOS 14.4 + - iOS 14.5 + - iOS 15.0 + - tvOS 14.0 + - tvOS 14.2 + - tvOS 14.3 + - tvOS 14.4 + - tvOS 14.5 + - tvOS 15.0 + - watchOS 7.0 + - watchOS 7.1 + - watchOS 7.2 + - watchOS 7.4 + - watchOS 8.0 + jdk: "17+35-2724" + - image: xcode12.5 + xcode: "12.5" + osx_version: "11.3" + xcode_full_version: "12.5" + xcode_build_version: "12E262" + image_publish_date: 2021-05-05 + sdks: + - iphoneos14.5 + - iphonesimulator14.5 + - macosx11.3 + - appletvos14.5 + - appletvsimulator14.5 + - watchos7.4 + - watchsimulator7.4 + simulators: + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.0 + - iOS 13.1 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - iOS 13.6 + - iOS 13.7 + - iOS 14.0 + - iOS 14.1 + - iOS 14.2 + - iOS 14.3 + - iOS 14.4 + - iOS 14.5 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.0 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - tvOS 14.0 + - tvOS 14.2 + - tvOS 14.3 + - tvOS 14.4 + - tvOS 14.5 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.0 + - watchOS 6.1 + - watchOS 6.2 + - watchOS 7.0 + - watchOS 7.1 + - watchOS 7.2 + - watchOS 7.4 + jdk: "16.0.1" + - image: xcode12.4 + xcode: "12.4" + osx_version: "11.2.1" + xcode_full_version: "12.4" + xcode_build_version: "12D4e" + image_publish_date: 2021-02-26 + sdks: + - iphoneos14.4 + - iphonesimulator14.4 + - driverkit.macosx20.2 + - macosx11.1 + - appletvos14.3 + - appletvsimulator14.3 + - watchos7.2 + - watchsimulator7.2 + simulators: + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.0 + - iOS 13.1 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - iOS 13.6 + - iOS 13.7 + - iOS 14.0 + - iOS 14.1 + - iOS 14.2 + - iOS 14.3 + - iOS 14.4 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.0 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - tvOS 14.0 + - tvOS 14.2 + - tvOS 14.3 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.0 + - watchOS 6.1 + - watchOS 6.2 + - watchOS 7.0 + - watchOS 7.1 + - watchOS 7.2 + jdk: "15.0.1" + - image: xcode12.3 + xcode: "12.3" + osx_version: "11.1" + xcode_full_version: "12.3" + xcode_build_version: "12C33" + image_publish_date: 2021-01-29 + sdks: + - iphoneos14.3 + - iphonesimulator14.3 + - macosx11.1 + - appletvos14.3 + - appletvsimulator14.3 + - watchos7.2 + - watchsimulator7.2 + simulators: + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.0 + - iOS 13.1 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - iOS 13.6 + - iOS 13.7 + - iOS 14.0 + - iOS 14.1 + - iOS 14.2 + - iOS 14.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.0 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - tvOS 14.0 + - tvOS 14.2 + - tvOS 14.3 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.0 + - watchOS 6.1 + - watchOS 6.2 + - watchOS 7.0 + - watchOS 7.1 + - watchOS 7.2 + jdk: "15.0.1" + - image: xcode12.2 + xcode: "12.2" + osx_version: "10.15.7" + xcode_full_version: "12.2" + xcode_build_version: "12B5018i" + image_publish_date: 2020-10-06 + sdks: + - iphoneos14.2 + - iphonesimulator14.2 + - macosx11.0 + - appletvos14.2 + - appletvsimulator14.2 + - watchos7.1 + - watchsimulator7.1 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.0 + - iOS 13.1 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - iOS 14.0 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.0 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - tvOS 14.0 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + - watchOS 6.2 + - watchOS 7.0 + jdk: "14.0.2" + - image: xcode12u + xcode: "12 (Universal)" + osx_version: "10.15.5" + xcode_full_version: "12.0" + xcode_build_version: "12A8161k" + image_publish_date: 2020-07-13 + sdks: + - iphoneos14.0 + - iphonesimulator14.0 + - driverkit.macosx20.0 + - macosx11.0 + simulators: + - iOS 14.0 + jdk: "14.0.1" + - image: xcode12 + xcode: "12" + osx_version: "10.15.7" + xcode_full_version: "12.0.1" + xcode_build_version: "12A7300" + image_publish_date: 2020-10-06 + sdks: + - iphoneos14.0 + - iphonesimulator14.0 + - macosx10.15 + - appletvos14.0 + - appletvsimulator14.0 + - watchos7 + - watchsimulator7 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.0 + - iOS 13.1 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - iOS 14.0 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.0 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - tvOS 14.0 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + - watchOS 6.2 + - watchOS 7.0 + jdk: "14.0.2" + - image: xcode11.6 + xcode: "11.6" + osx_version: "10.15.5" + xcode_full_version: "11.6" + xcode_build_version: "11E708" + image_publish_date: 2020-07-28 + sdks: + - iphoneos13.6 + - iphonesimulator13.6 + - macosx10.15 + - appletvos13.4 + - appletvsimulator13.4 + - watchos6.2 + - watchsimulator6.2 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - iOS 13.6 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + - watchOS 6.2 + jdk: "14.0.2" + - image: xcode11.5 + xcode: "11.5" + osx_version: "10.15.4" + xcode_full_version: "11.5" + xcode_build_version: "11E608c" + image_publish_date: 2020-05-27 + sdks: + - iphoneos13.5 + - iphonesimulator13.5 + - macosx10.15 + - appletvos13.4 + - appletvsimulator13.4 + - watchos6.2 + - watchsimulator6.2 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - iOS 13.5 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + - watchOS 6.2 + jdk: "14.0.1" + - image: xcode11.4 + xcode: "11.4.1" + osx_version: "10.15.4" + xcode_full_version: "11.4.1" + xcode_build_version: "11E503a" + image_publish_date: 2020-05-07 + sdks: + - iphoneos13.4 + - iphonesimulator13.4 + - macosx10.15 + - appletvos13.4 + - appletvsimulator13.4 + - watchos6.2 + - watchsimulator6.2 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.2 + - iOS 13.3 + - iOS 13.4 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.2 + - tvOS 13.3 + - tvOS 13.4 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + - watchOS 6.2 + jdk: "14.0.1" + - image: xcode11.3 + xcode: "11.3.1" + osx_version: "10.14.6" + xcode_full_version: "11.3.1" + xcode_build_version: "11C505" + image_publish_date: 2020-02-07 + sdks: + - iphoneos13.2 + - iphonesimulator13.2 + - macosx10.15 + - appletvos13.2 + - appletvsimulator13.2 + - watchos6.1 + - watchsimulator6.1 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.2 + - iOS 13.3 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.2 + - tvOS 13.3 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + jdk: "14" + - image: xcode11.2 + xcode: "11.2.1" + osx_version: "10.14.6" + xcode_full_version: "11.2.1" + xcode_build_version: "11B500" + image_publish_date: 2019-11-20 + sdks: + - iphoneos13.2 + - iphonesimulator13.2 + - macosx10.15 + - appletvos13.2 + - appletvsimulator13.2 + - watchos6.1 + - watchsimulator6.1 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - iOS 13.2 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - tvOS 13.2 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + - watchOS 6.1 + jdk: "14" + - image: xcode11.1 + xcode: "11.1" + osx_version: "10.14.6" + xcode_full_version: "11.1" + xcode_build_version: "11A1027" + image_publish_date: 2019-10-07 + sdks: + - iphoneos13.1 + - iphonesimulator13.1 + - macosx10.15 + - appletvos13.0 + - appletvsimulator13.0 + - watchos6.0 + - watchsimulator6.0 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 13.0 + - iOS 13.1 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 13.0 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 6.0 + jdk: "14" + - image: xcode11 + xcode: "11.0" + osx_version: "10.14.6" + xcode_full_version: "11.0" + xcode_build_version: "11A420a" + image_publish_date: 2019-09-19 + sdks: + - iphoneos13.0 + - iphonesimulator13.0 + - macosx10.15 + - appletvos13.0 + - appletvsimulator13.0 + - watchos6.0 + - watchsimulator6.0 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 13.0 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 13.0 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 6.0 + jdk: "14" + - image: xcode10.3 + xcode: "10.3" + osx_version: "10.14.4" + xcode_full_version: "10.3" + xcode_build_version: "18E226" + image_publish_date: 2019-08-10 + sdks: + - macosx10.14 + - iphoneos12.4 + - iphonesimulator12.4 + - appletvos12.4 + - appletvsimulator12.4 + - watchos5.3 + - watchsimulator5.3 + simulators: + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - iOS 12.4 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - tvOS 12.4 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + - watchOS 5.3 + jdk: "13.0.1" + - image: xcode10.2 + xcode: "10.2" + osx_version: "10.14" + xcode_full_version: "10.2.1" + xcode_build_version: "10E1001" + image_publish_date: 2019-04-18 + sdks: + - macosx10.14 + - iphoneos12.2 + - iphonesimulator12.2 + - appletvos12.2 + - appletvsimulator12.2 + - watchos5.2 + - watchsimulator5.2 + simulators: + - iOS 8.1 + - iOS 8.2 + - iOS 8.3 + - iOS 8.4 + - iOS 9.0 + - iOS 9.1 + - iOS 9.2 + - iOS 9.3 + - iOS 10.0 + - iOS 10.1 + - iOS 10.2 + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - iOS 12.2 + - tvOS 9.0 + - tvOS 9.1 + - tvOS 9.2 + - tvOS 10.0 + - tvOS 10.1 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - tvOS 12.2 + - watchOS 2.0 + - watchOS 2.1 + - watchOS 2.2 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + - watchOS 5.2 + jdk: "13.0.1" + - image: xcode10.1 + xcode: "10.1" + osx_version: "10.13" + xcode_full_version: "10.1" + xcode_build_version: "10B61" + image_publish_date: 2018-11-01 + sdks: + - macosx10.14 + - iphoneos12.1 + - iphonesimulator12.1 + - appletvos12.1 + - appletvsimulator12.1 + - watchos5.1 + - watchsimulator5.1 + simulators: + - iOS 8.1 + - iOS 8.2 + - iOS 8.3 + - iOS 8.4 + - iOS 9.0 + - iOS 9.1 + - iOS 9.2 + - iOS 9.3 + - iOS 10.0 + - iOS 10.1 + - iOS 10.2 + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - iOS 12.1 + - tvOS 9.0 + - tvOS 9.1 + - tvOS 9.2 + - tvOS 10.0 + - tvOS 10.1 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - tvOS 12.1 + - watchOS 2.0 + - watchOS 2.1 + - watchOS 2.2 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + - watchOS 5.1 + jdk: "13.0.1" + - image: xcode10 + xcode: "10.0" + osx_version: "10.13" + xcode_full_version: "10.0" + xcode_build_version: "10A255" + image_publish_date: 2018-09-19 + sdks: + - macosx10.14 + - iphoneos12.0 + - iphonesimulator12.0 + - appletvos12.0 + - appletvsimulator12.0 + - watchos5.0 + - watchsimulator5.0 + simulators: + - iOS 8.1 + - iOS 8.2 + - iOS 8.3 + - iOS 8.4 + - iOS 9.0 + - iOS 9.1 + - iOS 9.2 + - iOS 9.3 + - iOS 10.0 + - iOS 10.1 + - iOS 10.2 + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 + - iOS 12.0 + - tvOS 9.0 + - tvOS 9.1 + - tvOS 9.2 + - tvOS 10.0 + - tvOS 10.1 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 + - tvOS 12.0 + - watchOS 2.0 + - watchOS 2.1 + - watchOS 2.2 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 5.0 + jdk: "13.0.1" + - image: xcode9.4 + xcode: "9.4" + osx_version: "10.13" + xcode_full_version: "9.4.1" + xcode_build_version: "9F2000" + default: true + image_publish_date: 2018-06-15 sdks: - macosx10.13 - - iphoneos11.1 - - iphonesimulator11.1 - - appletvos11.1 - - appletvsimulator11.1 - - watchos4.1 - - watchsimulator4.1 + - iphoneos11.4 + - iphonesimulator11.4 + - appletvos11.4 + - appletvsimulator11.4 + - watchos4.3 + - watchsimulator4.3 simulators: - iOS 8.1 - iOS 8.2 @@ -27,6 +1122,9 @@ osx_images: - iOS 10.3 - iOS 11.0 - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - iOS 11.4 - tvOS 9.0 - tvOS 9.1 - tvOS 9.2 @@ -35,25 +1133,82 @@ osx_images: - tvOS 10.2 - tvOS 11.0 - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - tvOS 11.4 - watchOS 2.0 - watchOS 2.1 - watchOS 2.2 - watchOS 3.2 - watchOS 4.0 - watchOS 4.1 - - image: xcode9 - xcode: "9.0" + - watchOS 4.2 + - watchOS 4.3 + jdk: "13.0.1" + - image: xcode9.3 + xcode: "9.3" + osx_version: "10.13" + xcode_full_version: "9.3" + xcode_build_version: "9E145" + image_publish_date: 2018-04-09 + sdks: + - macosx10.13 + - iphoneos11.3 + - iphonesimulator11.3 + - appletvos11.2 + - appletvsimulator11.3 + - watchos4.3 + - watchsimulator4.3 + simulators: + - iOS 8.1 + - iOS 8.2 + - iOS 8.3 + - iOS 8.4 + - iOS 9.0 + - iOS 9.1 + - iOS 9.2 + - iOS 9.3 + - iOS 10.0 + - iOS 10.1 + - iOS 10.2 + - iOS 10.3 + - iOS 11.0 + - iOS 11.1 + - iOS 11.2 + - iOS 11.3 + - tvOS 9.0 + - tvOS 9.1 + - tvOS 9.2 + - tvOS 10.0 + - tvOS 10.1 + - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 + - tvOS 11.3 + - watchOS 2.0 + - watchOS 2.1 + - watchOS 2.2 + - watchOS 3.2 + - watchOS 4.0 + - watchOS 4.1 + - watchOS 4.2 + - watchOS 4.3 + jdk: "1.8.0_112-b16" + - image: xcode9.2 + xcode: "9.2" osx_version: "10.12" - xcode_full_version: "9" - image_publish_date: 2017-09-19 + xcode_full_version: "9.2" + xcode_build_version: "9C40b" + image_publish_date: 2017-12-06 sdks: - macosx10.13 - - iphoneos11.0 - - iphonesimulator11.0 - - appletvos11.0 - - appletvsimulator11.0 - - watchos4.0 - - watchsimulator4.0 + - iphoneos11.2 + - iphonesimulator11.2 + - appletvos11.2 + - appletvsimulator11.2 + - watchos4.2 + - watchsimulator4.2 simulators: - iOS 8.1 - iOS 8.2 @@ -68,6 +1223,8 @@ osx_images: - iOS 10.2 - iOS 10.3 - iOS 11.0 + - iOS 11.1 + - iOS 11.2 - tvOS 9.0 - tvOS 9.1 - tvOS 9.2 @@ -75,24 +1232,30 @@ osx_images: - tvOS 10.1 - tvOS 10.2 - tvOS 11.0 + - tvOS 11.1 + - tvOS 11.2 - watchOS 2.0 - watchOS 2.1 - watchOS 2.2 - watchOS 3.2 - watchOS 4.0 - - image: xcode8.3 - xcode: "8.3" + - watchOS 4.1 + - watchOS 4.2 + jdk: "1.8.0_112-b16" + - image: xcode9.1 + xcode: "9.1" osx_version: "10.12" - xcode_full_version: "8.3.3" - image_publish_date: 2017-06-06 + xcode_full_version: "9.1" + xcode_build_version: "9B55" + image_publish_date: 2017-10-04 sdks: - - macosx10.12 - - iphoneos10.3 - - iphonesimulator10.3 - - appletvos10.2 - - appletvsimulator10.2 - - watchos3.2 - - watchsimulator3.2 + - macosx10.13 + - iphoneos11.1 + - iphonesimulator11.1 + - appletvos11.1 + - appletvsimulator11.1 + - watchos4.1 + - watchsimulator4.1 simulators: - iOS 8.1 - iOS 8.2 @@ -106,29 +1269,37 @@ osx_images: - iOS 10.1 - iOS 10.2 - iOS 10.3 + - iOS 11.0 + - iOS 11.1 - tvOS 9.0 - tvOS 9.1 - tvOS 9.2 - tvOS 10.0 - tvOS 10.1 - tvOS 10.2 + - tvOS 11.0 + - tvOS 11.1 - watchOS 2.0 - watchOS 2.1 - watchOS 2.2 - watchOS 3.2 - - image: xcode8.2 - xcode: "8.2" + - watchOS 4.0 + - watchOS 4.1 + jdk: "1.8.0_112-b16" + - image: xcode9 + xcode: "9.0" osx_version: "10.12" - xcode_full_version: "8.2" - image_publish_date: 2016-12-13 + xcode_full_version: "9.0" + xcode_build_version: "9A235" + image_publish_date: 2017-09-19 sdks: - - macosx10.12 - - iphoneos10.2 - - iphonesimulator10.2 - - appletvos10.1 - - appletvsimulator10.1 - - watchos3.1 - - watchsimulator3.1 + - macosx10.13 + - iphoneos11.0 + - iphonesimulator11.0 + - appletvos11.0 + - appletvsimulator11.0 + - watchos4.0 + - watchsimulator4.0 simulators: - iOS 8.1 - iOS 8.2 @@ -141,29 +1312,35 @@ osx_images: - iOS 10.0 - iOS 10.1 - iOS 10.2 + - iOS 10.3 + - iOS 11.0 - tvOS 9.0 - tvOS 9.1 - tvOS 9.2 - tvOS 10.0 - tvOS 10.1 + - tvOS 10.2 + - tvOS 11.0 - watchOS 2.0 - watchOS 2.1 - watchOS 2.2 - - watchOS 3.1 - - image: xcode8.1 - xcode: "8.1" + - watchOS 3.2 + - watchOS 4.0 + jdk: "1.8.0_112-b16" + - image: xcode8.3 + xcode: "8.3" osx_version: "10.12" - xcode_full_version: "8.1" - image_note: "**Please note that this is our first image based on macOS 10.12.**" - image_publish_date: 2016-11-15 + xcode_full_version: "8.3.3" + xcode_build_version: "8E3004b" + image_publish_date: 2017-06-06 sdks: - macosx10.12 - - iphoneos10.1 - - iphonesimulator10.1 - - appletvos10.0 - - appletvsimulator10.0 - - watchos3.1 - - watchsimulator3.1 + - iphoneos10.3 + - iphonesimulator10.3 + - appletvos10.2 + - appletvsimulator10.2 + - watchos3.2 + - watchsimulator3.2 simulators: - iOS 8.1 - iOS 8.2 @@ -175,18 +1352,24 @@ osx_images: - iOS 9.3 - iOS 10.0 - iOS 10.1 + - iOS 10.2 + - iOS 10.3 - tvOS 9.0 - tvOS 9.1 - tvOS 9.2 - tvOS 10.0 + - tvOS 10.1 + - tvOS 10.2 - watchOS 2.0 - watchOS 2.1 - watchOS 2.2 - - watchOS 3.1 + - watchOS 3.2 + jdk: "1.8.0_112-b16" - image: xcode8 xcode: "8" osx_version: "10.11" - xcode_full_version: "8gm" + xcode_full_version: "8.0" + xcode_build_version: "8A218a" sdks: - macosx10.11 - iphoneos10.0 @@ -219,11 +1402,12 @@ osx_images: - "tvOS 9.0" - "tvOS 9.1" - "tvOS 9.2" + jdk: "1.8.0_92-b14" - image: xcode7.3 - xcode: "7.3.1" + xcode: "7.3" osx_version: "10.11" - default: true xcode_full_version: "7.3.1" + xcode_build_version: "7D1014" sdks: - macosx10.11 - iphoneos9.3 @@ -247,17 +1431,4 @@ osx_images: - "tvOS 9.0" - "tvOS 9.1" - "tvOS 9.2" - - image: xcode6.4 - xcode: "6.4" - osx_version: "10.10" - xcode_full_version: "6.4" - sdks: - - macosx10.9 - - macosx10.10 - - iphoneos8.4 - - iphonesimulator8.4 - simulators: - - "iOS 7.1" - - "iOS 8.1" - - "iOS 8.2" - - "iOS 8.4" + jdk: "1.8.0_92-b14" diff --git a/_includes/anchor_headings.html b/_includes/anchor_headings.html new file mode 100644 index 00000000000..b54623ee0d0 --- /dev/null +++ b/_includes/anchor_headings.html @@ -0,0 +1,86 @@ +{% capture headingsWorkspace %} + {% comment %} + Version 1.0.0-RC5 + https://github.com/allejo/jekyll-anchor-headings + + "Be the pull request you wish to see in the world." ~Ben Balter + + Usage: + {% include anchor_headings.html html=content %} + + Parameters: + * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll + + Optional Parameters: + * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content + * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available + * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space + * anchorTitle (string) : '' - The `title` attribute that will be used for anchors + * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored + * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored + + Output: + The original HTML with the addition of anchors inside of all of the h1-h6 headings. + {% endcomment %} + + {% assign minHeader = include.h_min | default: 1 %} + {% assign maxHeader = include.h_max | default: 6 %} + {% assign beforeHeading = include.beforeHeading %} + {% assign nodes = include.html | split: ' + {% if headerLevel < 1 or headerLevel > 6 %} + {% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %} + {% continue %} + {% endif %} + + {% assign _workspace = node | split: '' | first }}>{% endcapture %} + {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} + + + {% capture anchor %}{% endcapture %} + + {% if html_id and headerLevel >= minHeader and headerLevel <= maxHeader %} + {% capture anchor %}href="#{{ html_id}}"{% endcapture %} + + {% if include.anchorClass %} + {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %} + {% endif %} + + {% if include.anchorTitle %} + {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', header }}"{% endcapture %} + {% endif %} + + {% capture anchor %}{{ include.anchorBody | replace: '%heading%', header | default: '' | raw }}{% endcapture %} + + {% if beforeHeading %} + {% capture anchor %}{{ anchor }} {% endcapture %} + {% else %} + {% capture anchor %} {{ anchor }}{% endcapture %} + {% endif %} + {% endif %} + + + {% if beforeHeading %} + {% capture _current %}` does not exist until 4.9](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631). +Note that [GCC support for ISO C11 reached a similar level of completeness as ISO C99 in 4.9](https://gcc.gnu.org/wiki/C11Status) and that C++11 is feature-complete in 5.1 (the C++ language support was feature-complete in 4.8.1 but the standard library didn't support all C++11 features until [later](https://gcc.gnu.org/gcc-5/changes.html#libstdcxx), in particular [support for `` does not exist until 4.9](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631)). To upgrade GCC to a more recent version, you will have to install the appropriate version from the `ubuntu-toolchain-r-test` source; see below for examples: @@ -62,39 +65,29 @@ before_install: ``` {: data-file=".travis.yml"} -### GCC on OS X +### GCC on FreeBSD -```yaml -matrix: - include: - - os: osx - osx_image: xcode8 - env: - - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9" - - - os: osx - osx_image: xcode8 - env: - - MATRIX_EVAL="brew install gcc5 && CC=gcc-5 && CXX=g++-5" +Travis CI FreeBSD image ships with GCC 10.0.0 (it's not in the base system by default). - - os: osx - osx_image: xcode8 - env: - - MATRIX_EVAL="brew install gcc6 && CC=gcc-6 && CXX=g++-6" - - - os: osx - osx_image: xcode8 - env: - - MATRIX_EVAL="brew install gcc && CC=gcc-7 && CXX=g++-7" +To upgrade GCC to a more recent version, install the appropriate version from packages; see below for examples: -before_install: - - eval "${MATRIX_EVAL}" +```yaml +os: freebsd +addons: + pkg: + - gcc10 + env: + - CC=gcc10 + - CXX=g++10 ``` {: data-file=".travis.yml"} -### Clang +### Clang on Linux -Ubuntu 12.04 ships with Clang 3.4 and Ubuntu 14.04 ships with Clang 3.5.0. +* [Precise](/user/reference/precise/) ships with Clang 3.4 +* [Trusty](/user/reference/trusty/) ships with Clang 3.5.0 +* [Xenial](/user/reference/xenial/) ships with Clang 7 +* [Bionic](/user/reference/bionic/) ships with Clang 7 Note that [C++11 support is complete starting from Clang 3.3](http://clang.llvm.org/cxx_status.html). @@ -177,11 +170,35 @@ before_install: ``` {: data-file=".travis.yml"} -On OS X, the version of `clang` is controlled by the choice of `osx_image`. + +### Clang on FreeBSD + +> Clang is the default compiler on FreeBSD + +FreeBSD ships with Clang 8.0.1 + +To upgrade Clang to a more recent version, install the appropriate version from packages; see below for examples: + +```yaml +os: freebsd +addons: + pkg: + - llvm90 + env: + - CC=/usr/local/bin/clang90 # llvm90 installs it to /usr/local/bin/clang90 + - CXX=/usr/local/bin/clang++90 # llvm90 installs it to /usr/local/bin/clang++90 +``` +{: data-file=".travis.yml"} + +> Clang is the default compiler on FreeBSD #### CMake -Ubuntu 12.04 ships with cmake 2.8.7 and Ubuntu 14.04 ships with cmake 3.2.2. +* [Precise](/user/reference/precise/) ships with CMake 2.8.7 +* [Trusty](/user/reference/trusty/) ships with CMake 3.9.2 +* [Xenial](/user/reference/xenial/) ships with CMake 3.12.4 +* [Bionic](/user/reference/bionic/) ships with CMake 3.12.4 +* [FreeBSD](/user/reference/freebsd/) ships with CMake 3.15.5 You can upgrade cmake to 3.2.3 on Precise from the `george-edison55-precise-backports` source (note that the `cmake-data` package contains dependencies which Aptitude does not automatically resolve), c.f. @@ -196,4 +213,4 @@ addons: ``` {: data-file=".travis.yml"} -On OS X, the version of `cmake` is controlled by the choice of `osx_image`. + diff --git a/_includes/conditional_deploy.html b/_includes/conditional_deploy.html index d46b10efb30..4d04164840a 100644 --- a/_includes/conditional_deploy.html +++ b/_includes/conditional_deploy.html @@ -1,4 +1,4 @@ -

Conditional Deploys

+

Conditional Deploys

It is possible to make deployments conditional using the on option:

@@ -40,5 +40,3 @@

Conditional Deploys

  • ruby - Ruby version to deploy from if passing
  • repo - only trigger a build for the given repository, to play nice with forks
  • - - diff --git a/_includes/deploy/before_after_deploy.md b/_includes/deploy/before_after_deploy.md new file mode 100644 index 00000000000..907b6728750 --- /dev/null +++ b/_includes/deploy/before_after_deploy.md @@ -0,0 +1,18 @@ +## Running commands before and after the deploy step + +Sometimes you want to run commands before or after deploying. + +You can use the `before_deploy` and `after_deploy` steps for this. + +> Please note: These will +only be triggered if Travis CI is actually deploying. + +```yaml +before_deploy: "echo ready?" +deploy: + # ⋮ +after_deploy: + - ./after_deploy_1.sh + - ./after_deploy_2.sh +``` +{: data-file=".travis.yml"} diff --git a/_includes/deploy/cleanup.md b/_includes/deploy/cleanup.md new file mode 100644 index 00000000000..81aa20c4f29 --- /dev/null +++ b/_includes/deploy/cleanup.md @@ -0,0 +1,23 @@ +## Cleaning up the Git Working Directory + +By default your Git working directory will not be cleaned up before the deploy +step, so it might contain left over artifacts from previous steps. + +For many providers and deployment targets this is not an issue or even intended. + +If you do need to clean up the working directory from any changes made during +the build process, you can add the following to your `.travis.yml` file: + +```yaml +deploy: + provider: {{ page.provider | default: '[your provider]' }} + cleanup: true +``` +{: data-file=".travis.yml"} + +> Please note that the previous version of dpl, our deployment integration +tooling, used to reset your working directory and delete all changes made +during the build using `git stash --all`. In order to keep changes one had to +opt out using `skip_cleanup: true`. This default turned out to be useful only +for very few providers and has been changed in dpl v2. You still might find +external tutorials or posts mentioning `skip_cleanup`. diff --git a/_includes/deploy/conditional.md b/_includes/deploy/conditional.md new file mode 100644 index 00000000000..5f2bbb18ca8 --- /dev/null +++ b/_includes/deploy/conditional.md @@ -0,0 +1,5 @@ +## Conditional Deploys + +You can deploy only when certain conditions are met. + +See [Conditional Deployments](/user/deployment-v2/conditional). diff --git a/_includes/deploy/edge.md b/_includes/deploy/edge.md new file mode 100644 index 00000000000..1f3836a7e20 --- /dev/null +++ b/_includes/deploy/edge.md @@ -0,0 +1,14 @@ +## Running an edge version + +If you contribute to or experiment with [dpl](https://github.com/travis-ci/dpl), our deployment tooling, make sure you use the edge version from GitHub: + +```yaml +deploy: + provider: + edge: + branch: master + source: /dpl # only needed for forks of travis-ci/dpl +``` +{: data-file=".travis.yml"} + +You can find more information about contributing to dpl [here](https://github.com/travis-ci/dpl#contributing-to-dpl). diff --git a/_includes/deploy/maturity_levels.md b/_includes/deploy/maturity_levels.md new file mode 100644 index 00000000000..208a8114dfb --- /dev/null +++ b/_includes/deploy/maturity_levels.md @@ -0,0 +1,16 @@ +## Maturity Levels + +In order to communicate the current development status and maturity of dpl's +support for a particular service, the respective provider is marked with one of +the following maturity levels, according to the given criteria: + +* `dev` - the provider is in development (initial level) +* `alpha` - the provider is fully tested +* `beta` - the provider has been in alpha for at least a month and successful real-world production deployments have been observed +* `stable` - the provider has been in beta for at least two months and there are no open issues that qualify as critical (such as deployments failing, documented functionality broken, etc.) + +> Dpl v2 represents a major rewrite, so support for all providers has been +reset to `dev` or `alpha`, depending on the test status. + +For all levels except `stable` a message will be printed to your build log +that informs you about the current status. diff --git a/_includes/deploy/multiple_targets.md b/_includes/deploy/multiple_targets.md new file mode 100644 index 00000000000..a9f61326a80 --- /dev/null +++ b/_includes/deploy/multiple_targets.md @@ -0,0 +1,19 @@ +## Deploying to multiple targets + +Running multiple deployments to different providers (or the same provider with +different configurations) is possible by adding configurations to the `deploy` +section as a list. For example, if you want to deploy to both s3 and Heroku, +your `deploy` section would look something like this: + +```yaml +deploy: + - provider: s3 + access_key_id: + secret_access_key: + # ⋮ + - provider: heroku + api_key: + # ⋮ +``` +{: data-file=".travis.yml"} + diff --git a/_includes/deploy/opt_in.md b/_includes/deploy/opt_in.md new file mode 100644 index 00000000000..acfecf12730 --- /dev/null +++ b/_includes/deploy/opt_in.md @@ -0,0 +1,30 @@ +## How to opt in to different deployment tooling versions + +In order to use different version of our deployment tooling, please add the +following to your `.travis.yml`: + +```yaml +deploy: + provider: + # ⋮ + dpl_version: # Optional, defaults to the latest stable version +``` +if you want to use the latest edge version of the deployment tooling: + +```yaml +deploy: + provider: + # ⋮ + edge: true +``` +if you want to use other edge version of the deployment tooling: + +```yaml +deploy: + provider: + # ⋮ + dpl_version: + edge: true +``` + +{: data-file=".travis.yml"} diff --git a/_includes/deploy/providers/anynines.md b/_includes/deploy/providers/anynines.md new file mode 100644 index 00000000000..abd299f3265 --- /dev/null +++ b/_includes/deploy/providers/anynines.md @@ -0,0 +1,46 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: anynines + username: + password: + organization: + space: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Anynines is in **alpha**. Please see [Maturity Levels](/user/deployment-v2/#maturity-levels) for details. +## Known options + +Use the following options to further configure the deployment. + +| `username` | anynines username — **required**, type: string | +| `password` | anynines password — **required**, **secret**, type: string | +| `organization` | anynines organization — **required**, type: string | +| `space` | anynines space — **required**, type: string | +| `app_name` | Application name — type: string | +| `buildpack` | Buildpack name or Git URL — type: string | +| `manifest` | Path to the manifest — type: string | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `ANYNINES_`. + +For example, `password` can be given as `ANYNINES_PASSWORD=`. + +{% include deploy/secrets.md name="password" env_name="ANYNINES_PASSWORD" %} diff --git a/_includes/deploy/providers/azure_web_apps.md b/_includes/deploy/providers/azure_web_apps.md new file mode 100644 index 00000000000..f5ab01c4f1c --- /dev/null +++ b/_includes/deploy/providers/azure_web_apps.md @@ -0,0 +1,43 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: azure_web_apps + username: + password: + site: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Azure Web Apps is in **alpha**. Please see [Maturity Levels](/user/deployment-v2/#maturity-levels) for details. +## Known options + +Use the following options to further configure the deployment. + +| `username` | Web App Deployment Username — **required**, type: string | +| `password` | Web App Deployment Password — **required**, **secret**, type: string | +| `site` | Web App name (e.g. myapp in myapp.azurewebsites.net) — **required**, type: string | +| `slot` | Slot name (if your app uses staging deployment) — type: string | +| `verbose` | Print deployment output from Azure. Warning: If authentication fails, Git prints credentials in clear text. Correct credentials remain hidden. — type: boolean | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `AZURE_WA_`. + +For example, `password` can be given as `AZURE_WA_PASSWORD=`. + +{% include deploy/secrets.md name="password" env_name="AZURE_WA_PASSWORD" %} \ No newline at end of file diff --git a/_includes/deploy/providers/bintray.md b/_includes/deploy/providers/bintray.md new file mode 100644 index 00000000000..995dc7e00ee --- /dev/null +++ b/_includes/deploy/providers/bintray.md @@ -0,0 +1,42 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: bintray + user: + key: + file: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Bintray is **stable**. +## Known options + +Use the following options to further configure the deployment. + +| `user` | Bintray user — **required**, type: string | +| `key` | Bintray API key — **required**, **secret**, type: string | +| `file` | Path to a descriptor file for the Bintray upload — **required**, type: string | +| `passphrase` | Passphrase as configured on Bintray (if GPG signing is used) — type: string | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `BINTRAY_`. + +For example, `key` can be given as `BINTRAY_KEY=`. + +{% include deploy/secrets.md name="key" env_name="BINTRAY_KEY" %} diff --git a/_includes/deploy/providers/bluemixcloudfoundry.md b/_includes/deploy/providers/bluemixcloudfoundry.md new file mode 100644 index 00000000000..3169a66aa56 --- /dev/null +++ b/_includes/deploy/providers/bluemixcloudfoundry.md @@ -0,0 +1,49 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: bluemixcloudfoundry + username: + password: + organization: + space: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Bluemix Cloud Foundry is **stable**. +## Known options + +Use the following options to further configure the deployment. + +| `username` | Bluemix username — **required**, type: string | +| `password` | Bluemix password — **required**, **secret**, type: string | +| `organization` | Bluemix organization — **required**, type: string | +| `space` | Bluemix space — **required**, type: string | +| `region` | Bluemix region — type: string, default: `ng`, known values: `ng`, `eu-gb`, `eu-de`, `au-syd` | +| `api` | Bluemix api URL — type: string | +| `app_name` | Application name — type: string | +| `buildpack` | Buildpack name or Git URL — type: string | +| `manifest` | Path to the manifest — type: string | +| `skip_ssl_validation` | Skip SSL validation — type: boolean | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `CLOUDFOUNDRY_`. + +For example, `password` can be given as `CLOUDFOUNDRY_PASSWORD=`. + +{% include deploy/secrets.md name="password" env_name="CLOUDFOUNDRY_PASSWORD" %} diff --git a/_includes/deploy/providers/boxfuse.md b/_includes/deploy/providers/boxfuse.md new file mode 100644 index 00000000000..98779acb3ec --- /dev/null +++ b/_includes/deploy/providers/boxfuse.md @@ -0,0 +1,45 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: boxfuse + user: + secret: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Boxfuse is in **alpha**. Please see [Maturity Levels](/user/deployment-v2/#maturity-levels) for details. +## Known options + +Use the following options to further configure the deployment. + +| `user` | **required**, type: string | +| `secret` | **required**, **secret**, type: string | +| `payload` | type: string | +| `app` | type: string | +| `version` | type: string | +| `env` | type: string | +| `config_file` | type: string, alias: `configfile` (deprecated, please use `config_file`) | +| `extra_args` | type: string | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `BOXFUSE_`. + +For example, `secret` can be given as `BOXFUSE_SECRET=`. + +{% include deploy/secrets.md name="secret" env_name="BOXFUSE_SECRET" %} \ No newline at end of file diff --git a/_includes/deploy/providers/cargo.md b/_includes/deploy/providers/cargo.md new file mode 100644 index 00000000000..d3809add71f --- /dev/null +++ b/_includes/deploy/providers/cargo.md @@ -0,0 +1,38 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: cargo + token: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Cargo is **stable**. +## Known options + +Use the following options to further configure the deployment. + +| `token` | Cargo registry API token — **required**, **secret**, type: string | +| `allow_dirty` | Allow publishing from a dirty git working directory — type: boolean | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `CARGO_`. + +For example, `token` can be given as `CARGO_TOKEN=`. + +{% include deploy/secrets.md name="token" env_name="CARGO_TOKEN" %} diff --git a/_includes/deploy/providers/chef_supermarket.md b/_includes/deploy/providers/chef_supermarket.md new file mode 100644 index 00000000000..f0d3051e96f --- /dev/null +++ b/_includes/deploy/providers/chef_supermarket.md @@ -0,0 +1,36 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: chef_supermarket + user_id: + category: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Chef Supermarket is in **alpha**. Please see [Maturity Levels](/user/deployment-v2/#maturity-levels) for details. +## Known options + +Use the following options to further configure the deployment. + +| `user_id` | Chef Supermarket user name — **required**, type: string | +| `name` | Cookbook name — type: string, alias: `cookbook_name` (deprecated, please use `name`), note: defaults to the name given in metadata.json or metadata.rb | +| `category` | Cookbook category in Supermarket — **required**, type: string, alias: `cookbook_category` (deprecated, please use `category`), see: [https://docs.getchef.com/knife_cookbook_site.html#id12](https://docs.getchef.com/knife_cookbook_site.html#id12) | +| `client_key` | Client API key file name — type: string, default: `client.pem` | +| `dir` | Directory containing the cookbook — type: string, default: `.` | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + + diff --git a/_includes/deploy/providers/cloud66.md b/_includes/deploy/providers/cloud66.md new file mode 100644 index 00000000000..8cdd9ec964c --- /dev/null +++ b/_includes/deploy/providers/cloud66.md @@ -0,0 +1,37 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: cloud66 + redeployment_hook: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Cloud66 is in **alpha**. Please see [Maturity Levels](/user/deployment-v2/#maturity-levels) for details. +## Known options + +Use the following options to further configure the deployment. + +| `redeployment_hook` | The redeployment hook URL — **required**, **secret**, type: string | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `CLOUD66_`. + +For example, `redeployment_hook` can be given as `CLOUD66_REDEPLOYMENT_HOOK=`. + +{% include deploy/secrets.md name="redeployment_hook" env_name="CLOUD66_REDEPLOYMENT_HOOK" %} \ No newline at end of file diff --git a/_includes/deploy/providers/cloudfiles.md b/_includes/deploy/providers/cloudfiles.md new file mode 100644 index 00000000000..0ae34b1bb1f --- /dev/null +++ b/_includes/deploy/providers/cloudfiles.md @@ -0,0 +1,45 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: cloudfiles + username: + api_key: + region: + container: + edge: true # opt in to dpl v2 +``` +{: data-file=".travis.yml"} + + + +{{ include.content }} +{% endunless %} + +## Status + +Support for deployments to Cloud Files is in **alpha**. Please see [Maturity Levels](/user/deployment-v2/#maturity-levels) for details. +## Known options + +Use the following options to further configure the deployment. + +| `username` | Rackspace username — **required**, type: string | +| `api_key` | Rackspace API key — **required**, **secret**, type: string | +| `region` | Cloudfiles region — **required**, type: string, known values: `ord`, `dfw`, `syd`, `iad`, `hkg` | +| `container` | Name of the container that files will be uploaded to — **required**, type: string | +| `glob` | Paths to upload — type: string, default: `**/*` | +| `dot_match` | Upload hidden files starting a dot — type: boolean | + +### Shared options + +| `cleanup` | Clean up build artifacts from the Git working directory before the deployment — type: boolean | +| `run` | Commands to execute after the deployment finished successfully — type: string or array of strings | + +## Environment variables + +All options can be given as environment variables if prefixed with `CLOUDFILES_`. + +For example, `api_key` can be given as `CLOUDFILES_API_KEY=`. + +{% include deploy/secrets.md name="api_key" env_name="CLOUDFILES_API_KEY" %} \ No newline at end of file diff --git a/_includes/deploy/providers/cloudformation.md b/_includes/deploy/providers/cloudformation.md new file mode 100644 index 00000000000..0d965061622 --- /dev/null +++ b/_includes/deploy/providers/cloudformation.md @@ -0,0 +1,57 @@ +{% unless include.minimal == false %} +For a minimal configuration, add the following to your `.travis.yml`: + +```yaml +deploy: + provider: cloudformation + access_key_id: + secret_access_key: + template: