├── .github └── workflows │ ├── link-checker.yml │ ├── prettier.yml │ └── validate-configs.yml ├── .gitignore ├── .gitmodules ├── .prettierignore ├── .tugboat ├── compile-vars.js ├── config.yml ├── env-vars.yml └── peek.sh ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── archetypes └── default.md ├── assets └── css │ └── theme-tugboat.css ├── config.toml ├── content ├── _images │ ├── add-accounts-connect-account-link.png │ ├── add-accounts-select-a-git-provider.png │ ├── add-repos-to-project-generic-git-provider.png │ ├── add-repos-to-project-select-repo.png │ ├── add-user-copy-link-resend.png │ ├── add-user-email-and-permissions.png │ ├── add-user-press-invite-button.png │ ├── api-authentication-choose-personal-access-token.png │ ├── api-authentication-enter-the-access-token.png │ ├── api-authentication-press-ok-button.png │ ├── api-authentication-press-the-change-button.png │ ├── api-authentication-read-instructions.png │ ├── authenticate-with-a-docker-registry-add-credentials.png │ ├── auto-build-preview-repository-settings.png │ ├── auto-delete-preview-repository-settings.png │ ├── auto-update-preview-repository-settings.png │ ├── base-preview-actions-delete.png │ ├── base-preview-actions-rebuild.png │ ├── base-preview-actions-refresh.png │ ├── base-preview-press-delete-button.png │ ├── base-preview-press-rebuild-button.png │ ├── base-preview-press-refresh-button.png │ ├── base-preview-rebuild-previews-from-base-after-rebuild.png │ ├── base-preview-rebuild-previews-from-base-after-refresh.png │ ├── billing-change-billing-information.png │ ├── billing-change-plan-update-tier.png │ ├── billing-delete-project.png │ ├── billing-plan-update-email.png │ ├── billing-project-stats-project-storage.png │ ├── billing-repo-stats-vs-project-stats.png │ ├── billing-scroll-past-your-plan.png │ ├── billing-setting-up-paid-tugboat-plan.png │ ├── billing-tugboat-billing-info-screen.png │ ├── billing-view-tugboat-plan.png │ ├── billing-view-your-plan-premium.png │ ├── bitbucket-authorize-tugboat.png │ ├── bitbucket-sign-in-button.png │ ├── bitbucket-sign-in.png │ ├── browse-tags-on-docker-hub.png │ ├── change-base-preview-type-radio-button.png │ ├── change-base-preview-type-save-configuration.png │ ├── change-user-permissions-access-drop-down.png │ ├── click-checkbox-to-deselect-base-preview.png │ ├── click-checkbox-to-use-preview-as-base-preview.png │ ├── click-into-drop-down-next-to-build-preview.png │ ├── click-into-preview-name.png │ ├── click-into-service-name.png │ ├── click-into-settings-for-base-preview-type-change.png │ ├── click-into-tugboat-repository.png │ ├── click-project-settings-link.png │ ├── click-select-a-base-preview.png │ ├── click-sign-in-using-your-email-address-button.png │ ├── click-the-disconnect-link.png │ ├── cloned-preview.png │ ├── code-snippets--bash-aliases--terminal.png │ ├── copy-codes-to-clipboard-and-press-close.png │ ├── copy-new-access-token.png │ ├── copy-new-codes-to-clipboard-and-press-close-button.png │ ├── create-a-new-project.png │ ├── create-a-tugboat-project-screen.png │ ├── delete-repository.png │ ├── diffy-envvars.png │ ├── disable-2fa-press-ok-button.png │ ├── enter-access-token-in-cli.png │ ├── enter-and-verify-new-password-press-ok.png │ ├── enter-and-verify-password-press-ok.png │ ├── enter-email-address-and-password-or-click-sign-up.png │ ├── enter-new-code-and-press-verify-button.png │ ├── enter-token-description-and-generate.png │ ├── environment-variable-scope-in-ui.png │ ├── envvars-config.png │ ├── failed-log.png │ ├── generate-new-token.png │ ├── github-account-for-tugboat-comments.png │ ├── github-account-tugboat-avatar.png │ ├── github-authorize-tugboat.png │ ├── github-sign-in-button.png │ ├── github-sign-in.png │ ├── gitlab-authorize-tugboat.png │ ├── gitlab-sign-in-button.png │ ├── gitlab-sign-in.png │ ├── go-into-settings-for-base-preview-you-want-to-stop-using.png │ ├── go-to-add-a-repository.png │ ├── go-to-available-to-build.png │ ├── go-to-build-preview-drop-down.png │ ├── go-to-password-click-change.png │ ├── go-to-password-click-disable.png │ ├── go-to-password-click-enable.png │ ├── go-to-repository-settings.png │ ├── go-to-two-factor-authentication-and-click-enable.png │ ├── go-to-two-factor-authentication-and-click-reconfigure.png │ ├── go-to-two-factor-authentication-click-disable.png │ ├── go-to-user-access-tokens.png │ ├── go-to-user-my-projects.png │ ├── go-to-user-select-profile.png │ ├── go-two-factor-authentication-click-renew.png │ ├── inside-a-preview-log.png │ ├── inside-a-preview-open-terminal-into-service.png │ ├── inside-a-preview-preview-action.png │ ├── inside-a-preview-service-build-and-output-logs.png │ ├── inside-a-preview-services.png │ ├── jira-env-mapped.png │ ├── lighthouse-accessibility-passed-audits.png │ ├── lighthouse-accessibility-report.png │ ├── lighthouse-best-practices-passed-audits.png │ ├── lighthouse-best-practices-report.png │ ├── lighthouse-click-into-category-or-details.png │ ├── lighthouse-performance-passed-audits.png │ ├── lighthouse-performance-report.png │ ├── lighthouse-progressive-web-app-report.png │ ├── lighthouse-regenerate-reports.png │ ├── lighthouse-reports-in-dashboard.png │ ├── lighthouse-reports-in-preview-dashboard.png │ ├── lighthouse-reports-on-github-pr.png │ ├── lighthouse-reports-pane.png │ ├── lighthouse-reports.png │ ├── lighthouse-seo-passed-audits.png │ ├── lighthouse-seo-report.png │ ├── manually-approve-a-visual-diff.png │ ├── manually-build-click-build-preview-button.png │ ├── manually-build-click-into-repo.png │ ├── manually-build-preview-building.png │ ├── manually-build-scroll-to-available-to-build.png │ ├── manually-share-preview.png │ ├── multiple-base-preview-builds.png │ ├── new-base-preview-in-base-previews.png │ ├── no-branch-base-preview-option.png │ ├── pantheon-add-to-team.png │ ├── pantheon-new-token.png │ ├── pantheon-php-settings.png │ ├── pantheon-register.png │ ├── pantheon-settings.png │ ├── pantheon-token-generated.png │ ├── phpmyadmin-preview.png │ ├── pr-probe.png │ ├── press-disconnect-button.png │ ├── press-ok-to-confirm-password-disable.png │ ├── preview-action-clone.png │ ├── preview-action-confirm-delete.png │ ├── preview-action-confirm-rebuild.png │ ├── preview-action-confirm-refresh.png │ ├── preview-action-confirm-reset.png │ ├── preview-action-delete.png │ ├── preview-action-lock.png │ ├── preview-action-rebuild.png │ ├── preview-action-refresh.png │ ├── preview-action-reset.png │ ├── preview-action-stop.png │ ├── preview-id-in-address-bar.png │ ├── preview-ready.png │ ├── preview-settings-press-save-configuration-button.png │ ├── preview-statistics.png │ ├── remote-ssh-access-copy-ssh-key.png │ ├── remove-user-click-remove-link.png │ ├── repo-stats-build-time.png │ ├── repository-id-in-address-bar.png │ ├── repository-settings-press-save-configuration.png │ ├── repository-settings-refresh-base-previews-automatically.png │ ├── scan-new-qr-code-or-manually-enter-it.png │ ├── scan-the-qr-code-or-manually-enter-it.png │ ├── scroll-to-api-authentication.png │ ├── scroll-to-available-to-build.png │ ├── select-a-git-provider-to-disconnect.png │ ├── select-a-preview.png │ ├── select-a-project.png │ ├── select-build-with-no-base-preview.png │ ├── select-previews-to-use-as-base-preview.png │ ├── select-project-to-set-base-preview.png │ ├── select-repo-to-set-base-preview.png │ ├── select-repository-base-preview.png │ ├── service-id-in-address-bar.png │ ├── set-base-preview-go-into-preview-settings.png │ ├── share-preview-post-preview-links-in-pull-request-comments.png │ ├── share-preview-repo-settings-save-configuration.png │ ├── sign-in-from-tugboat-qa.png │ ├── slack-webhook-example.png │ ├── specify-base-previews-for-preview-build-press-ok.png │ ├── specify-branch-base-preview-type.png │ ├── specify-repository-base-preview-type.png │ ├── stop-using-base-preview-press-save-configuration.png │ ├── testery-and-tugboat-on-pr.png │ ├── troubleshooting-how-to-check-preview-logs.png │ ├── troubleshooting-terminal-into-service.png │ ├── tugboat-build-phases.png │ ├── tugboat-cli-cant-be-opened.png │ ├── tugboat-cli-find-service-id.png │ ├── tugboat-cli-shell-access-in-service.png │ ├── tugboat-project-id.png │ ├── tugboat-sign-in-pane.png │ ├── twitter-card-summary-image.png │ ├── type-the-code-and-press-verify.png │ ├── verify-base-preview-type-change-view-branch-base-previews.png │ ├── verify-new-2fa-recovery-codes.png │ ├── view-base-preview-for-preview.png │ ├── view-base-preview-types-default-all.png │ ├── view-branch-base-previews.png │ ├── view-failed-visual-diff.png │ ├── view-multiple-base-previews.png │ ├── view-repository-base-previews.png │ ├── visual-diff-has-been-approved.png │ ├── visual-diffs-before-after-example.png │ ├── visual-diffs-click-into-desktop-to-view-diff.png │ ├── visual-diffs-click-into-mobile-to-view-diff.png │ ├── visual-diffs-click-into-preview.png │ ├── visual-diffs-do-not-meet-similarity-threshold copy.png │ ├── visual-diffs-do-not-meet-similarity-threshold.png │ ├── visual-diffs-fail-status-in-github.png │ ├── visual-diffs-page-contents-moved-down.png │ ├── visual-diffs-pass-status-in-github.png │ ├── visual-diffs-regenerate-single.png │ ├── visual-diffs-regenerate.png │ ├── visual-diffs-scroll-to-view-visual-diffs.png │ ├── visual-diffs-url-not-found.png │ ├── visual-diffs-view-details-from-github.png │ └── visualdiff.png ├── _index.md ├── building-a-preview │ ├── _index.md │ ├── administer-previews │ │ ├── _index.md │ │ ├── build-previews.md │ │ ├── change-or-update-previews.md │ │ ├── change-preview-states.md │ │ └── delete-previews.md │ ├── automate-previews │ │ ├── _index.md │ │ ├── auto-delete.md │ │ ├── auto-generate.md │ │ └── auto-update.md │ ├── preview-deep-dive │ │ ├── _index.md │ │ ├── how-previews-work.md │ │ ├── inside-a-preview.md │ │ └── optimize-preview-builds.md │ ├── share-a-preview │ │ ├── _index.md │ │ ├── auto-share-url.md │ │ └── manually-share-url.md │ └── work-with-base-previews │ │ ├── _index.md │ │ ├── building-new-previews.md │ │ ├── change-or-update.md │ │ ├── delete-base-preview.md │ │ ├── set-a-base-preview.md │ │ ├── stop-using-base-preview.md │ │ └── view-base-preview-types.md ├── faq │ ├── _index.md │ ├── common-questions.md │ ├── compatible-technologies.md │ ├── find-tugboat-ids.md │ └── tugboat-ip-addresses.md ├── lighthouse │ ├── _index.md │ ├── configure-lighthouse.md │ ├── using-lighthouse.md │ └── view-lighthouse-reports.md ├── logo.png ├── manage-users │ ├── _index.md │ ├── account-authentication.md │ ├── add-a-user.md │ ├── add-tugboat-bot-to-team.md │ ├── change-permissions.md │ ├── remove-a-user.md │ └── user-admin.md ├── reference │ ├── _index.md │ ├── environment-variables.md │ ├── tugboat-community-images.md │ ├── tugboat-configuration.md │ ├── tugboat-error-codes.md │ └── tugboat-images.md ├── setting-up-services │ ├── _index.md │ ├── how-to-set-up-services │ │ ├── _index.md │ │ ├── clone-git-repositories-into-your-services.md │ │ ├── custom-environment-variables.md │ │ ├── define-a-default-service.md │ │ ├── expose-a-service-http-port.md │ │ ├── leverage-service-commands.md │ │ ├── name-your-service.md │ │ ├── running-a-background-process.md │ │ ├── service-urls.md │ │ ├── services-in-action.md │ │ ├── set-the-document-root-path.md │ │ └── specify-a-service-image.md │ └── service-images │ │ ├── _index.md │ │ ├── docker-pull.md │ │ ├── image-version-tags.md │ │ ├── mirror-production-with-image.md │ │ ├── third-party-docker-images.md │ │ └── using-tugboat-images.md ├── setting-up-tugboat │ ├── _index.md │ ├── add-repos-to-the-project.md │ ├── connect-with-your-provider.md │ ├── create-a-new-project.md │ ├── create-a-tugboat-config-file.md │ └── select-repo-settings.md ├── starter-configs │ ├── _index.md │ ├── code-snippets │ │ ├── _index.md │ │ ├── import-mysql-database.md │ │ ├── install-nodejs.md │ │ ├── memcache.md │ │ ├── page-cache.md │ │ ├── phpmyadmin.md │ │ └── terminal-aliases.md │ ├── examples │ │ ├── _index.md │ │ ├── adobe-experience-manager.md │ │ ├── gatsby.md │ │ ├── generic-lamp.md │ │ ├── ruby-on-rails.md │ │ ├── static-html.md │ │ ├── static-hugo.md │ │ ├── static-jekyll.md │ │ ├── static-mkdocs.md │ │ └── wagtail-cms.md │ └── tutorials │ │ ├── _index.md │ │ ├── drupal-10.md │ │ ├── drupal-7.md │ │ ├── drupal-8.md │ │ ├── drupal-9.md │ │ ├── lagoon.md │ │ ├── laravel.md │ │ ├── pantheon.md │ │ └── wordpress.md ├── support │ └── _index.md ├── third-party-integrations │ ├── _index.md │ ├── diffy-integration.md │ ├── jira.md │ ├── slack-integration.md │ ├── tenon-io.md │ └── testery.md ├── troubleshooting │ ├── _index.md │ ├── debug-config-file.md │ ├── fix-problem-x.md │ ├── preview-built-problem.md │ └── preview-wont-build.md ├── tugboat-billing │ ├── _index.md │ ├── cancel-billing.md │ ├── change-billing-information.md │ ├── change-tugboat-plan.md │ └── tugboat-pricing.md ├── tugboat-cli │ ├── _index.md │ ├── install-the-cli.md │ ├── set-an-access-token.md │ └── use-the-cli.md └── visual-diffs │ ├── _index.md │ ├── configure-visual-diffs.md │ ├── use-visual-diffs-thresholds.md │ ├── using-visual-diffs.md │ └── view-visual-diffs.md ├── layouts ├── 404.html ├── partials │ ├── configurable_twitter_cards.html │ ├── custom-header.html │ ├── favicon.html │ ├── head-fonts.html │ ├── logo.html │ ├── menu-footer.html │ └── new-google-analytics.html └── shortcodes │ ├── icon.html │ └── ui-text.html ├── logo.png ├── package-lock.json ├── package.json ├── peek.yml ├── static ├── .htaccess ├── config-schema.json ├── favicon │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-167x167.png │ ├── apple-touch-icon-180x180.png │ ├── favicon-16x16.png │ ├── favicon-192x192.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── favicon.svg │ ├── ms-tile-128x128.png │ ├── ms-tile-270x270.png │ ├── ms-tile-558x270.png │ └── ms-tile-558x558.png ├── fonts │ └── poppins │ │ ├── poppins-v6-latin-300.woff │ │ ├── poppins-v6-latin-300.woff2 │ │ ├── poppins-v6-latin-500.woff │ │ ├── poppins-v6-latin-500.woff2 │ │ ├── poppins-v6-latin-600.woff │ │ ├── poppins-v6-latin-600.woff2 │ │ ├── poppins-v6-latin-italic.woff │ │ ├── poppins-v6-latin-italic.woff2 │ │ ├── poppins-v6-latin-regular.woff │ │ └── poppins-v6-latin-regular.woff2 ├── images │ ├── logo-tugboat-white.svg │ ├── logo-tugboat.svg │ └── tugboat-boat-wordmark.svg └── robots.txt ├── test └── smolder.yaml └── yarn.lock /.github/workflows/link-checker.yml: -------------------------------------------------------------------------------- 1 | name: link checker 2 | 3 | on: 4 | - push 5 | - pull_request 6 | 7 | jobs: 8 | link-checker: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v4 13 | with: 14 | submodules: true 15 | - name: install hugo 16 | # Equivalent to peaceiris/actions-hugo@v2.5.0 17 | uses: peaceiris/actions-hugo@c03b5dbed22245418539b65eb9a3b1d5fdd9a0a6 18 | with: 19 | hugo-version: '0.147.8' 20 | - name: build hugo 21 | run: hugo 22 | - name: yarn install 23 | # Equivalent to borales/actions-yarn@v3.0.0 24 | uses: borales/actions-yarn@d8ce577a6f5d99a459fc7fdf2a86844617e353e4 25 | with: 26 | cmd: install 27 | - name: yarn test 28 | uses: borales/actions-yarn@d8ce577a6f5d99a459fc7fdf2a86844617e353e4 29 | with: 30 | cmd: test 31 | -------------------------------------------------------------------------------- /.github/workflows/prettier.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: prettier 5 | 6 | on: 7 | - push 8 | - pull_request 9 | 10 | jobs: 11 | prettier: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v3 17 | # Equivalent to actionsx/prettier@v2 18 | - uses: actionsx/prettier@13639c769e72c3e51d53ae383b681a684c883233 19 | with: 20 | # prettier CLI arguments. 21 | args: '--check "**/*.md"' 22 | -------------------------------------------------------------------------------- /.github/workflows/validate-configs.yml: -------------------------------------------------------------------------------- 1 | name: Validate TugboatQA/tugboat-test configs against schema 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - '.github/workflows/validate-configs.yml' 7 | - 'static/config-schema.json' 8 | workflow_dispatch: 9 | 10 | jobs: 11 | validate: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout schema repository 15 | uses: actions/checkout@v4 16 | with: 17 | path: schema-repo 18 | 19 | - name: Checkout test repository 20 | uses: actions/checkout@v4 21 | with: 22 | repository: TugboatQA/tugboat-test 23 | path: test-repo 24 | fetch-depth: 0 25 | 26 | - name: Setup Node.js 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: '20' 30 | 31 | - name: Install ajv-cli 32 | run: | 33 | npm install -g ajv-cli@5.0.0 34 | 35 | - name: Validate configs 36 | working-directory: test-repo 37 | run: | 38 | # Get all remote branches 39 | git ls-remote --heads https://github.com/TugboatQA/tugboat-test.git | sed 's|^.*refs/heads/||' | while read -r branch; do 40 | echo "::group::Checking branch: $branch" 41 | 42 | # Checkout branch 43 | git checkout "$branch" 44 | 45 | # If config.yml exists, validate it 46 | if [ -f .tugboat/config.yml ]; then 47 | echo "Validating config.yml in branch $branch" 48 | if [ "$branch" = "yaml-fail" ] || [ "$branch" = "invalid-yaml" ]; then 49 | # For yaml-fail and invalid-yaml branches, we expect validation to fail 50 | if ajv validate --all-errors -s ../schema-repo/static/config-schema.json -d .tugboat/config.yml; then 51 | echo "::error::Branch $branch was expected to fail validation but passed" 52 | exit 1 53 | else 54 | echo "Branch $branch failed validation as expected" 55 | fi 56 | else 57 | # For all other branches, validation should pass 58 | if ! ajv validate --all-errors -s ../schema-repo/static/config-schema.json -d .tugboat/config.yml; then 59 | echo "::error::Schema validation failed for branch $branch" 60 | exit 1 61 | fi 62 | fi 63 | else 64 | echo "::warning::No config.yml found in branch $branch" 65 | fi 66 | echo "::endgroup::" 67 | done -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | yarn-error.log 3 | 4 | *.DS_Store 5 | *.swp 6 | *.swo 7 | 8 | # Jetbrains IDE stuff 9 | .idea 10 | 11 | # Vidual Code Studio 12 | .vscode 13 | 14 | # Atom on-save plugin 15 | .on-save.json 16 | 17 | # Hugo dir generated from Hugo build 18 | public 19 | 20 | .ddev 21 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "themes/hugo-theme-relearn"] 2 | path = themes/hugo-theme-relearn 3 | url = https://github.com/McShelby/hugo-theme-relearn.git 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | themes/hugo-theme-learn 2 | mu-plugins 3 | -------------------------------------------------------------------------------- /.tugboat/config.yml: -------------------------------------------------------------------------------- 1 | services: 2 | apache: 3 | image: tugboatqa/httpd 4 | commands: 5 | init: 6 | - curl -Ls https://github.com/gohugoio/hugo/releases/download/v0.147.8/hugo_0.147.8_Linux-64bit.tar.gz | tar -C /usr/local/bin -zxf - hugo 7 | - sed -i '/mod_rewrite/s/#//g' /usr/local/apache2/conf/httpd.conf 8 | - sed -i 's/AllowOverride None/AllowOverride All/g' /usr/local/apache2/conf/httpd.conf 9 | 10 | # Install node. 11 | - apt-get update 12 | - apt-get install -yq ca-certificates curl gnupg 13 | - mkdir -p /etc/apt/keyrings 14 | - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o 15 | /etc/apt/keyrings/nodesource.gpg 16 | - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | 17 | tee /etc/apt/sources.list.d/nodesource.list 18 | - apt-get update 19 | - apt-get install -yq nodejs 20 | - npm install 21 | 22 | build: 23 | - git submodule init && git submodule update 24 | - hugo 25 | - ln -snf "${TUGBOAT_ROOT}/public" "${DOCROOT}" 26 | 27 | # Get a list of all environment vars and their example values. 28 | - npm install 29 | - node ${TUGBOAT_ROOT}/.tugboat/compile-vars.js 30 | 31 | urls: 32 | - / 33 | - /setting-up-services/ 34 | - /setting-up-tugboat/ 35 | - url: /visual-diffs/configure-visual-diffs/ 36 | visualdiff: 37 | threshold: 97 38 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Tugboat Docs 2 | 3 | Welcome! We're glad you're interested in contributing to Tugboat's documentation. 4 | 5 | ## Setup and Installation 6 | 7 | To get started, you'll need to set up Hugo to preview your changes locally: 8 | 9 | 1. **Install Hugo**: Follow the installation instructions on the 10 | [Hugo website](https://gohugo.io/getting-started/installing/). 11 | 12 | 2. **Install Yarn 1.x**: You'll need Yarn 1.x to run scripts and the local server. Install Yarn 1.x from the 13 | [classic Yarn documentation](https://classic.yarnpkg.com/en/docs/install#mac-stable). 14 | 15 | 3. **Running the Local Environment**: Once Hugo and Yarn are installed, you can start the local environment by running 16 | `hugo serve` or `yarn serve`. 17 | 18 | Visit `http://localhost:1313` in your browser to see the site. 19 | 20 | ## Making Changes 21 | 22 | Feel free to make updates from fixing typos to adding new content. Before submitting your changes, please run the 23 | linting script to ensure your updates adhere to our style guidelines: 24 | 25 | yarn lint 26 | 27 | or, to automatically fix issues, 28 | 29 | yarn lint-fix 30 | 31 | ### Specific Instructions for the Environment Variables Page 32 | 33 | The [Environment Variables](https://docs.tugboaatqa.com/reference/environment-variables/) page is unique because it is 34 | generated from a script. Here’s how to update it: 35 | 36 | 1. Uncomment the `aliases` section in `.tugboat/config.yml`. 37 | 2. Modify the `.tugboat/env-vars.yml` file as needed. 38 | 3. Push to GitHub and create a pull request. 39 | 4. Have Tugboat build the preview with a base preview. 40 | 5. Go to `https://[preview-subdomain].tugboatqa.com/vars.md` and copy the markdown. 41 | 6. Paste it into `/content/reference/environment-variables.md`. 42 | 7. Comment out the `aliases` section in `.tugboat/config.yml`. 43 | 8. Commit and push your changes. 44 | 45 | Thank you for contributing to our docs site! Your efforts help us keep our resources helpful and up-to-date. 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Tugboat QA, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Tugboat Logo 2 | 3 | # Welcome to Tugboat! 4 | 5 | Tugboat is a system that builds a working preview of a website for any branch, tag, commit, or pull request in a git 6 | repository. It can automatically create these previews for pull requests by integrating with GitHub, GitLab, or 7 | Bitbucket git repositories. 8 | 9 | This document aims to provide the information required to use Tugboat. It includes tutorials, examples, and references 10 | for all experience levels. 11 | 12 | ## Contributing 13 | 14 | This document is open-source, and is available on [GitHub](https://github.com/TugboatQA/docs). If you have any 15 | suggestions or other feedback about this document, we are happy to hear it! 16 | [Open a GitHub issue](https://github.com/TugboatQA/docs/issues/new) or email us at 17 | [support@tugboatqa.com](mailto:support@tugboatqa.com). 18 | 19 | ## Theme 20 | 21 | The [Hugo Learn Theme](https://github.com/matcornic/hugo-theme-learn) is included in this repo as a git subtree. To 22 | update the theme, find the latest tag at https://github.com/matcornic/hugo-theme-learn/releases and run the following 23 | 24 | ```sh 25 | export TAG=2.4.0 26 | git subtree pull --prefix themes/hugo-theme-learn https://github.com/matcornic/hugo-theme-learn.git $TAG --squash 27 | ``` 28 | 29 | ## Redirects 30 | 31 | Redirects for historic URLs are maintained in `static/.htaccess`. These can be tested using 32 | [Smolder](https://github.com/sky-shiny/smolder) config file in `test/smolder.yaml`. The tests need to be run against a 33 | live instance, like a Tugboat preview. 34 | 35 | ```sh 36 | cat test/smolder.yaml | docker run -i mcameron/smolder pr125-mcktkhcj8krhxo5oaa7emgv5gcnf5e5l.tugboatqa.com 37 | ``` 38 | 39 | ## License Information 40 | 41 | This document is licensed as 42 | [Creative Commons Attribution-NonCommercial-ShareAlike CC BY-NC-SA](http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode). 43 | 44 | Everything not covered above is licensed under the [MIT license](https://choosealicense.com/licenses/mit/). 45 | -------------------------------------------------------------------------------- /archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | weight: 5 6 | --- 7 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | #baseURL = "https://docs.tugboatqa.com/" 2 | languageCode = "en-us" 3 | title = "Tugboat Documentation" 4 | 5 | # Suppress raw HTML warnings for Hugo Relearn compatibility 6 | ignoreLogs = ['warning-goldmark-raw-html'] 7 | 8 | # Change the default theme to be use when building the site with Hugo 9 | theme = "hugo-theme-relearn" 10 | 11 | # For search functionality 12 | [outputs] 13 | home = [ "HTML", "RSS", "JSON"] 14 | 15 | # Markup configuration for Hugo Relearn 16 | [markup] 17 | [markup.goldmark] 18 | [markup.goldmark.renderer] 19 | unsafe = true 20 | 21 | [params] 22 | # Google Analytics ID, uncomment to enable. 23 | #googleAnalytics = "G-1K7LBY47YH" 24 | # Change default color scheme with a variant one. Can be "red", "blue", "green". 25 | themeVariant = "tugboat" 26 | 27 | # Set this to true to disable copy-to-clipboard button for inline code. 28 | disableInlineCopyToClipBoard = true 29 | 30 | # Hide the Home button in the sidebar navigation 31 | disableLandingPageButton = true 32 | 33 | # Hide date display on documents 34 | hideAuthorDate = true 35 | 36 | editURL = "https://github.com/TugboatQA/docs/edit/main/content/" 37 | 38 | [[params.boxStyle]] 39 | color = 'purple' 40 | i18n = '' 41 | icon = 'rainbow' 42 | identifier = 'tier' 43 | title = 'Tugboat Tier' 44 | 45 | # Set Twitter card defaults for documentation site 46 | [params.twitterCard] 47 | card = "summary" 48 | image = "https://docs.tugboatqa.com/_images/twitter-card-summary-image.png" 49 | imageAlt = "TugboatQA Documentation Site" 50 | site = "@TugboatQA" 51 | creator = "@TugboatQA" 52 | title = "Tugboat Documentation" 53 | description = "How to use Tugboat to build a working Preview from every pull request, branch, or tag." 54 | -------------------------------------------------------------------------------- /content/_images/add-accounts-connect-account-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-accounts-connect-account-link.png -------------------------------------------------------------------------------- /content/_images/add-accounts-select-a-git-provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-accounts-select-a-git-provider.png -------------------------------------------------------------------------------- /content/_images/add-repos-to-project-generic-git-provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-repos-to-project-generic-git-provider.png -------------------------------------------------------------------------------- /content/_images/add-repos-to-project-select-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-repos-to-project-select-repo.png -------------------------------------------------------------------------------- /content/_images/add-user-copy-link-resend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-user-copy-link-resend.png -------------------------------------------------------------------------------- /content/_images/add-user-email-and-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-user-email-and-permissions.png -------------------------------------------------------------------------------- /content/_images/add-user-press-invite-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/add-user-press-invite-button.png -------------------------------------------------------------------------------- /content/_images/api-authentication-choose-personal-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/api-authentication-choose-personal-access-token.png -------------------------------------------------------------------------------- /content/_images/api-authentication-enter-the-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/api-authentication-enter-the-access-token.png -------------------------------------------------------------------------------- /content/_images/api-authentication-press-ok-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/api-authentication-press-ok-button.png -------------------------------------------------------------------------------- /content/_images/api-authentication-press-the-change-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/api-authentication-press-the-change-button.png -------------------------------------------------------------------------------- /content/_images/api-authentication-read-instructions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/api-authentication-read-instructions.png -------------------------------------------------------------------------------- /content/_images/authenticate-with-a-docker-registry-add-credentials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/authenticate-with-a-docker-registry-add-credentials.png -------------------------------------------------------------------------------- /content/_images/auto-build-preview-repository-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/auto-build-preview-repository-settings.png -------------------------------------------------------------------------------- /content/_images/auto-delete-preview-repository-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/auto-delete-preview-repository-settings.png -------------------------------------------------------------------------------- /content/_images/auto-update-preview-repository-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/auto-update-preview-repository-settings.png -------------------------------------------------------------------------------- /content/_images/base-preview-actions-delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-actions-delete.png -------------------------------------------------------------------------------- /content/_images/base-preview-actions-rebuild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-actions-rebuild.png -------------------------------------------------------------------------------- /content/_images/base-preview-actions-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-actions-refresh.png -------------------------------------------------------------------------------- /content/_images/base-preview-press-delete-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-press-delete-button.png -------------------------------------------------------------------------------- /content/_images/base-preview-press-rebuild-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-press-rebuild-button.png -------------------------------------------------------------------------------- /content/_images/base-preview-press-refresh-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-press-refresh-button.png -------------------------------------------------------------------------------- /content/_images/base-preview-rebuild-previews-from-base-after-rebuild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-rebuild-previews-from-base-after-rebuild.png -------------------------------------------------------------------------------- /content/_images/base-preview-rebuild-previews-from-base-after-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/base-preview-rebuild-previews-from-base-after-refresh.png -------------------------------------------------------------------------------- /content/_images/billing-change-billing-information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-change-billing-information.png -------------------------------------------------------------------------------- /content/_images/billing-change-plan-update-tier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-change-plan-update-tier.png -------------------------------------------------------------------------------- /content/_images/billing-delete-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-delete-project.png -------------------------------------------------------------------------------- /content/_images/billing-plan-update-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-plan-update-email.png -------------------------------------------------------------------------------- /content/_images/billing-project-stats-project-storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-project-stats-project-storage.png -------------------------------------------------------------------------------- /content/_images/billing-repo-stats-vs-project-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-repo-stats-vs-project-stats.png -------------------------------------------------------------------------------- /content/_images/billing-scroll-past-your-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-scroll-past-your-plan.png -------------------------------------------------------------------------------- /content/_images/billing-setting-up-paid-tugboat-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-setting-up-paid-tugboat-plan.png -------------------------------------------------------------------------------- /content/_images/billing-tugboat-billing-info-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-tugboat-billing-info-screen.png -------------------------------------------------------------------------------- /content/_images/billing-view-tugboat-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-view-tugboat-plan.png -------------------------------------------------------------------------------- /content/_images/billing-view-your-plan-premium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/billing-view-your-plan-premium.png -------------------------------------------------------------------------------- /content/_images/bitbucket-authorize-tugboat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/bitbucket-authorize-tugboat.png -------------------------------------------------------------------------------- /content/_images/bitbucket-sign-in-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/bitbucket-sign-in-button.png -------------------------------------------------------------------------------- /content/_images/bitbucket-sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/bitbucket-sign-in.png -------------------------------------------------------------------------------- /content/_images/browse-tags-on-docker-hub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/browse-tags-on-docker-hub.png -------------------------------------------------------------------------------- /content/_images/change-base-preview-type-radio-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/change-base-preview-type-radio-button.png -------------------------------------------------------------------------------- /content/_images/change-base-preview-type-save-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/change-base-preview-type-save-configuration.png -------------------------------------------------------------------------------- /content/_images/change-user-permissions-access-drop-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/change-user-permissions-access-drop-down.png -------------------------------------------------------------------------------- /content/_images/click-checkbox-to-deselect-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-checkbox-to-deselect-base-preview.png -------------------------------------------------------------------------------- /content/_images/click-checkbox-to-use-preview-as-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-checkbox-to-use-preview-as-base-preview.png -------------------------------------------------------------------------------- /content/_images/click-into-drop-down-next-to-build-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-into-drop-down-next-to-build-preview.png -------------------------------------------------------------------------------- /content/_images/click-into-preview-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-into-preview-name.png -------------------------------------------------------------------------------- /content/_images/click-into-service-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-into-service-name.png -------------------------------------------------------------------------------- /content/_images/click-into-settings-for-base-preview-type-change.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-into-settings-for-base-preview-type-change.png -------------------------------------------------------------------------------- /content/_images/click-into-tugboat-repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-into-tugboat-repository.png -------------------------------------------------------------------------------- /content/_images/click-project-settings-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-project-settings-link.png -------------------------------------------------------------------------------- /content/_images/click-select-a-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-select-a-base-preview.png -------------------------------------------------------------------------------- /content/_images/click-sign-in-using-your-email-address-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-sign-in-using-your-email-address-button.png -------------------------------------------------------------------------------- /content/_images/click-the-disconnect-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/click-the-disconnect-link.png -------------------------------------------------------------------------------- /content/_images/cloned-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/cloned-preview.png -------------------------------------------------------------------------------- /content/_images/code-snippets--bash-aliases--terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/code-snippets--bash-aliases--terminal.png -------------------------------------------------------------------------------- /content/_images/copy-codes-to-clipboard-and-press-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/copy-codes-to-clipboard-and-press-close.png -------------------------------------------------------------------------------- /content/_images/copy-new-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/copy-new-access-token.png -------------------------------------------------------------------------------- /content/_images/copy-new-codes-to-clipboard-and-press-close-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/copy-new-codes-to-clipboard-and-press-close-button.png -------------------------------------------------------------------------------- /content/_images/create-a-new-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/create-a-new-project.png -------------------------------------------------------------------------------- /content/_images/create-a-tugboat-project-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/create-a-tugboat-project-screen.png -------------------------------------------------------------------------------- /content/_images/delete-repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/delete-repository.png -------------------------------------------------------------------------------- /content/_images/diffy-envvars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/diffy-envvars.png -------------------------------------------------------------------------------- /content/_images/disable-2fa-press-ok-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/disable-2fa-press-ok-button.png -------------------------------------------------------------------------------- /content/_images/enter-access-token-in-cli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/enter-access-token-in-cli.png -------------------------------------------------------------------------------- /content/_images/enter-and-verify-new-password-press-ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/enter-and-verify-new-password-press-ok.png -------------------------------------------------------------------------------- /content/_images/enter-and-verify-password-press-ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/enter-and-verify-password-press-ok.png -------------------------------------------------------------------------------- /content/_images/enter-email-address-and-password-or-click-sign-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/enter-email-address-and-password-or-click-sign-up.png -------------------------------------------------------------------------------- /content/_images/enter-new-code-and-press-verify-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/enter-new-code-and-press-verify-button.png -------------------------------------------------------------------------------- /content/_images/enter-token-description-and-generate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/enter-token-description-and-generate.png -------------------------------------------------------------------------------- /content/_images/environment-variable-scope-in-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/environment-variable-scope-in-ui.png -------------------------------------------------------------------------------- /content/_images/envvars-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/envvars-config.png -------------------------------------------------------------------------------- /content/_images/failed-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/failed-log.png -------------------------------------------------------------------------------- /content/_images/generate-new-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/generate-new-token.png -------------------------------------------------------------------------------- /content/_images/github-account-for-tugboat-comments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/github-account-for-tugboat-comments.png -------------------------------------------------------------------------------- /content/_images/github-account-tugboat-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/github-account-tugboat-avatar.png -------------------------------------------------------------------------------- /content/_images/github-authorize-tugboat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/github-authorize-tugboat.png -------------------------------------------------------------------------------- /content/_images/github-sign-in-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/github-sign-in-button.png -------------------------------------------------------------------------------- /content/_images/github-sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/github-sign-in.png -------------------------------------------------------------------------------- /content/_images/gitlab-authorize-tugboat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/gitlab-authorize-tugboat.png -------------------------------------------------------------------------------- /content/_images/gitlab-sign-in-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/gitlab-sign-in-button.png -------------------------------------------------------------------------------- /content/_images/gitlab-sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/gitlab-sign-in.png -------------------------------------------------------------------------------- /content/_images/go-into-settings-for-base-preview-you-want-to-stop-using.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-into-settings-for-base-preview-you-want-to-stop-using.png -------------------------------------------------------------------------------- /content/_images/go-to-add-a-repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-add-a-repository.png -------------------------------------------------------------------------------- /content/_images/go-to-available-to-build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-available-to-build.png -------------------------------------------------------------------------------- /content/_images/go-to-build-preview-drop-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-build-preview-drop-down.png -------------------------------------------------------------------------------- /content/_images/go-to-password-click-change.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-password-click-change.png -------------------------------------------------------------------------------- /content/_images/go-to-password-click-disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-password-click-disable.png -------------------------------------------------------------------------------- /content/_images/go-to-password-click-enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-password-click-enable.png -------------------------------------------------------------------------------- /content/_images/go-to-repository-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-repository-settings.png -------------------------------------------------------------------------------- /content/_images/go-to-two-factor-authentication-and-click-enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-two-factor-authentication-and-click-enable.png -------------------------------------------------------------------------------- /content/_images/go-to-two-factor-authentication-and-click-reconfigure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-two-factor-authentication-and-click-reconfigure.png -------------------------------------------------------------------------------- /content/_images/go-to-two-factor-authentication-click-disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-two-factor-authentication-click-disable.png -------------------------------------------------------------------------------- /content/_images/go-to-user-access-tokens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-user-access-tokens.png -------------------------------------------------------------------------------- /content/_images/go-to-user-my-projects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-user-my-projects.png -------------------------------------------------------------------------------- /content/_images/go-to-user-select-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-to-user-select-profile.png -------------------------------------------------------------------------------- /content/_images/go-two-factor-authentication-click-renew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/go-two-factor-authentication-click-renew.png -------------------------------------------------------------------------------- /content/_images/inside-a-preview-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/inside-a-preview-log.png -------------------------------------------------------------------------------- /content/_images/inside-a-preview-open-terminal-into-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/inside-a-preview-open-terminal-into-service.png -------------------------------------------------------------------------------- /content/_images/inside-a-preview-preview-action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/inside-a-preview-preview-action.png -------------------------------------------------------------------------------- /content/_images/inside-a-preview-service-build-and-output-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/inside-a-preview-service-build-and-output-logs.png -------------------------------------------------------------------------------- /content/_images/inside-a-preview-services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/inside-a-preview-services.png -------------------------------------------------------------------------------- /content/_images/jira-env-mapped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/jira-env-mapped.png -------------------------------------------------------------------------------- /content/_images/lighthouse-accessibility-passed-audits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-accessibility-passed-audits.png -------------------------------------------------------------------------------- /content/_images/lighthouse-accessibility-report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-accessibility-report.png -------------------------------------------------------------------------------- /content/_images/lighthouse-best-practices-passed-audits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-best-practices-passed-audits.png -------------------------------------------------------------------------------- /content/_images/lighthouse-best-practices-report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-best-practices-report.png -------------------------------------------------------------------------------- /content/_images/lighthouse-click-into-category-or-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-click-into-category-or-details.png -------------------------------------------------------------------------------- /content/_images/lighthouse-performance-passed-audits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-performance-passed-audits.png -------------------------------------------------------------------------------- /content/_images/lighthouse-performance-report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-performance-report.png -------------------------------------------------------------------------------- /content/_images/lighthouse-progressive-web-app-report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-progressive-web-app-report.png -------------------------------------------------------------------------------- /content/_images/lighthouse-regenerate-reports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-regenerate-reports.png -------------------------------------------------------------------------------- /content/_images/lighthouse-reports-in-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-reports-in-dashboard.png -------------------------------------------------------------------------------- /content/_images/lighthouse-reports-in-preview-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-reports-in-preview-dashboard.png -------------------------------------------------------------------------------- /content/_images/lighthouse-reports-on-github-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-reports-on-github-pr.png -------------------------------------------------------------------------------- /content/_images/lighthouse-reports-pane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-reports-pane.png -------------------------------------------------------------------------------- /content/_images/lighthouse-reports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-reports.png -------------------------------------------------------------------------------- /content/_images/lighthouse-seo-passed-audits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-seo-passed-audits.png -------------------------------------------------------------------------------- /content/_images/lighthouse-seo-report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/lighthouse-seo-report.png -------------------------------------------------------------------------------- /content/_images/manually-approve-a-visual-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/manually-approve-a-visual-diff.png -------------------------------------------------------------------------------- /content/_images/manually-build-click-build-preview-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/manually-build-click-build-preview-button.png -------------------------------------------------------------------------------- /content/_images/manually-build-click-into-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/manually-build-click-into-repo.png -------------------------------------------------------------------------------- /content/_images/manually-build-preview-building.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/manually-build-preview-building.png -------------------------------------------------------------------------------- /content/_images/manually-build-scroll-to-available-to-build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/manually-build-scroll-to-available-to-build.png -------------------------------------------------------------------------------- /content/_images/manually-share-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/manually-share-preview.png -------------------------------------------------------------------------------- /content/_images/multiple-base-preview-builds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/multiple-base-preview-builds.png -------------------------------------------------------------------------------- /content/_images/new-base-preview-in-base-previews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/new-base-preview-in-base-previews.png -------------------------------------------------------------------------------- /content/_images/no-branch-base-preview-option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/no-branch-base-preview-option.png -------------------------------------------------------------------------------- /content/_images/pantheon-add-to-team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pantheon-add-to-team.png -------------------------------------------------------------------------------- /content/_images/pantheon-new-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pantheon-new-token.png -------------------------------------------------------------------------------- /content/_images/pantheon-php-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pantheon-php-settings.png -------------------------------------------------------------------------------- /content/_images/pantheon-register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pantheon-register.png -------------------------------------------------------------------------------- /content/_images/pantheon-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pantheon-settings.png -------------------------------------------------------------------------------- /content/_images/pantheon-token-generated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pantheon-token-generated.png -------------------------------------------------------------------------------- /content/_images/phpmyadmin-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/phpmyadmin-preview.png -------------------------------------------------------------------------------- /content/_images/pr-probe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/pr-probe.png -------------------------------------------------------------------------------- /content/_images/press-disconnect-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/press-disconnect-button.png -------------------------------------------------------------------------------- /content/_images/press-ok-to-confirm-password-disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/press-ok-to-confirm-password-disable.png -------------------------------------------------------------------------------- /content/_images/preview-action-clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-clone.png -------------------------------------------------------------------------------- /content/_images/preview-action-confirm-delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-confirm-delete.png -------------------------------------------------------------------------------- /content/_images/preview-action-confirm-rebuild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-confirm-rebuild.png -------------------------------------------------------------------------------- /content/_images/preview-action-confirm-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-confirm-refresh.png -------------------------------------------------------------------------------- /content/_images/preview-action-confirm-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-confirm-reset.png -------------------------------------------------------------------------------- /content/_images/preview-action-delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-delete.png -------------------------------------------------------------------------------- /content/_images/preview-action-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-lock.png -------------------------------------------------------------------------------- /content/_images/preview-action-rebuild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-rebuild.png -------------------------------------------------------------------------------- /content/_images/preview-action-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-refresh.png -------------------------------------------------------------------------------- /content/_images/preview-action-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-reset.png -------------------------------------------------------------------------------- /content/_images/preview-action-stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-action-stop.png -------------------------------------------------------------------------------- /content/_images/preview-id-in-address-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-id-in-address-bar.png -------------------------------------------------------------------------------- /content/_images/preview-ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-ready.png -------------------------------------------------------------------------------- /content/_images/preview-settings-press-save-configuration-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-settings-press-save-configuration-button.png -------------------------------------------------------------------------------- /content/_images/preview-statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/preview-statistics.png -------------------------------------------------------------------------------- /content/_images/remote-ssh-access-copy-ssh-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/remote-ssh-access-copy-ssh-key.png -------------------------------------------------------------------------------- /content/_images/remove-user-click-remove-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/remove-user-click-remove-link.png -------------------------------------------------------------------------------- /content/_images/repo-stats-build-time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/repo-stats-build-time.png -------------------------------------------------------------------------------- /content/_images/repository-id-in-address-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/repository-id-in-address-bar.png -------------------------------------------------------------------------------- /content/_images/repository-settings-press-save-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/repository-settings-press-save-configuration.png -------------------------------------------------------------------------------- /content/_images/repository-settings-refresh-base-previews-automatically.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/repository-settings-refresh-base-previews-automatically.png -------------------------------------------------------------------------------- /content/_images/scan-new-qr-code-or-manually-enter-it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/scan-new-qr-code-or-manually-enter-it.png -------------------------------------------------------------------------------- /content/_images/scan-the-qr-code-or-manually-enter-it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/scan-the-qr-code-or-manually-enter-it.png -------------------------------------------------------------------------------- /content/_images/scroll-to-api-authentication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/scroll-to-api-authentication.png -------------------------------------------------------------------------------- /content/_images/scroll-to-available-to-build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/scroll-to-available-to-build.png -------------------------------------------------------------------------------- /content/_images/select-a-git-provider-to-disconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-a-git-provider-to-disconnect.png -------------------------------------------------------------------------------- /content/_images/select-a-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-a-preview.png -------------------------------------------------------------------------------- /content/_images/select-a-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-a-project.png -------------------------------------------------------------------------------- /content/_images/select-build-with-no-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-build-with-no-base-preview.png -------------------------------------------------------------------------------- /content/_images/select-previews-to-use-as-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-previews-to-use-as-base-preview.png -------------------------------------------------------------------------------- /content/_images/select-project-to-set-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-project-to-set-base-preview.png -------------------------------------------------------------------------------- /content/_images/select-repo-to-set-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-repo-to-set-base-preview.png -------------------------------------------------------------------------------- /content/_images/select-repository-base-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/select-repository-base-preview.png -------------------------------------------------------------------------------- /content/_images/service-id-in-address-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/service-id-in-address-bar.png -------------------------------------------------------------------------------- /content/_images/set-base-preview-go-into-preview-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/set-base-preview-go-into-preview-settings.png -------------------------------------------------------------------------------- /content/_images/share-preview-post-preview-links-in-pull-request-comments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/share-preview-post-preview-links-in-pull-request-comments.png -------------------------------------------------------------------------------- /content/_images/share-preview-repo-settings-save-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/share-preview-repo-settings-save-configuration.png -------------------------------------------------------------------------------- /content/_images/sign-in-from-tugboat-qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/sign-in-from-tugboat-qa.png -------------------------------------------------------------------------------- /content/_images/slack-webhook-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/slack-webhook-example.png -------------------------------------------------------------------------------- /content/_images/specify-base-previews-for-preview-build-press-ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/specify-base-previews-for-preview-build-press-ok.png -------------------------------------------------------------------------------- /content/_images/specify-branch-base-preview-type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/specify-branch-base-preview-type.png -------------------------------------------------------------------------------- /content/_images/specify-repository-base-preview-type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/specify-repository-base-preview-type.png -------------------------------------------------------------------------------- /content/_images/stop-using-base-preview-press-save-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/stop-using-base-preview-press-save-configuration.png -------------------------------------------------------------------------------- /content/_images/testery-and-tugboat-on-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/testery-and-tugboat-on-pr.png -------------------------------------------------------------------------------- /content/_images/troubleshooting-how-to-check-preview-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/troubleshooting-how-to-check-preview-logs.png -------------------------------------------------------------------------------- /content/_images/troubleshooting-terminal-into-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/troubleshooting-terminal-into-service.png -------------------------------------------------------------------------------- /content/_images/tugboat-build-phases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/tugboat-build-phases.png -------------------------------------------------------------------------------- /content/_images/tugboat-cli-cant-be-opened.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/tugboat-cli-cant-be-opened.png -------------------------------------------------------------------------------- /content/_images/tugboat-cli-find-service-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/tugboat-cli-find-service-id.png -------------------------------------------------------------------------------- /content/_images/tugboat-cli-shell-access-in-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/tugboat-cli-shell-access-in-service.png -------------------------------------------------------------------------------- /content/_images/tugboat-project-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/tugboat-project-id.png -------------------------------------------------------------------------------- /content/_images/tugboat-sign-in-pane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/tugboat-sign-in-pane.png -------------------------------------------------------------------------------- /content/_images/twitter-card-summary-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/twitter-card-summary-image.png -------------------------------------------------------------------------------- /content/_images/type-the-code-and-press-verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/type-the-code-and-press-verify.png -------------------------------------------------------------------------------- /content/_images/verify-base-preview-type-change-view-branch-base-previews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/verify-base-preview-type-change-view-branch-base-previews.png -------------------------------------------------------------------------------- /content/_images/verify-new-2fa-recovery-codes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/verify-new-2fa-recovery-codes.png -------------------------------------------------------------------------------- /content/_images/view-base-preview-for-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/view-base-preview-for-preview.png -------------------------------------------------------------------------------- /content/_images/view-base-preview-types-default-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/view-base-preview-types-default-all.png -------------------------------------------------------------------------------- /content/_images/view-branch-base-previews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/view-branch-base-previews.png -------------------------------------------------------------------------------- /content/_images/view-failed-visual-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/view-failed-visual-diff.png -------------------------------------------------------------------------------- /content/_images/view-multiple-base-previews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/view-multiple-base-previews.png -------------------------------------------------------------------------------- /content/_images/view-repository-base-previews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/view-repository-base-previews.png -------------------------------------------------------------------------------- /content/_images/visual-diff-has-been-approved.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diff-has-been-approved.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-before-after-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-before-after-example.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-click-into-desktop-to-view-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-click-into-desktop-to-view-diff.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-click-into-mobile-to-view-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-click-into-mobile-to-view-diff.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-click-into-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-click-into-preview.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-do-not-meet-similarity-threshold copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-do-not-meet-similarity-threshold copy.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-do-not-meet-similarity-threshold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-do-not-meet-similarity-threshold.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-fail-status-in-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-fail-status-in-github.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-page-contents-moved-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-page-contents-moved-down.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-pass-status-in-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-pass-status-in-github.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-regenerate-single.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-regenerate-single.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-regenerate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-regenerate.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-scroll-to-view-visual-diffs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-scroll-to-view-visual-diffs.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-url-not-found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-url-not-found.png -------------------------------------------------------------------------------- /content/_images/visual-diffs-view-details-from-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visual-diffs-view-details-from-github.png -------------------------------------------------------------------------------- /content/_images/visualdiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/_images/visualdiff.png -------------------------------------------------------------------------------- /content/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tugboat Documentation" 3 | date: 2019-09-17T09:34:20-04:00 4 | --- 5 | 6 | ## Welcome to Tugboat! 7 | 8 | Tugboat is a system that builds a working preview of a website for any branch, tag, commit, or pull request in a git 9 | repository. It can automatically create these previews for pull requests by integrating with GitHub, GitLab, or 10 | Bitbucket git repositories. 11 | 12 | 13 | {{% button icon="fas fa-external-link-alt" class="btn-learn-more" href="https://www.tugboatqa.com" %}}Learn more{{% /button %}}  14 | {{% button style="primary" icon="fas fa-external-link-alt" class="btn-sign-up" href="https://dashboard.tugboatqa.com" %}}Sign in{{% /button %}} 15 | 16 | 17 | This website aims to provide the information required to use Tugboat. It includes tutorials, examples, and references 18 | for all experience levels. 19 | 20 | ## API Documentation 21 | 22 | If you're looking for our API documentation, check out [Tugboat's API Documentation Portal](https://api.tugboatqa.com). 23 | 24 | ## Contributing 25 | 26 | This document is open-source, and is available on [GitHub](https://github.com/TugboatQA/docs). If you have any 27 | suggestions or other feedback about this document, we are happy to hear it! 28 | [Open a GitHub issue](https://github.com/TugboatQA/docs/issues/new) or email us at 29 | [support@tugboatqa.com](mailto:support@tugboatqa.com). 30 | 31 | ## License Information 32 | 33 | This document is licensed as 34 | [Creative Commons Attribution-NonCommercial-ShareAlike CC BY-NC-SA](http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode). 35 | 36 | Everything not covered above is licensed under the [MIT license](https://choosealicense.com/licenses/mit/). 37 | -------------------------------------------------------------------------------- /content/building-a-preview/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Building a Preview" 3 | date = 2019-09-19T10:04:16-04:00 4 | weight = 3 5 | chapter = true 6 | pre = "3. " 7 | +++ 8 | 9 | How to build and update a Preview, administer Previews, and use Base Previews. 10 | 11 | {{%children depth="2"%}} 12 | -------------------------------------------------------------------------------- /content/building-a-preview/administer-previews/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Administer Previews" 3 | date = 2019-09-24T11:46:15-04:00 4 | weight = 1 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Build, update, and delete Previews. Change Preview states; Reset, Start/Stop, Lock/Unlock. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/building-a-preview/administer-previews/delete-previews.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Delete Previews" 3 | date: 2019-09-24T11:48:24-04:00 4 | weight: 5 5 | --- 6 | 7 | Need to get rid of a Preview you're not using anymore? Each Preview in your Tugboat project counts toward the total 8 | [storage size for Tugboat billing](/tugboat-billing/tugboat-pricing/#how-does-tugboat-pricing-work), so it's a good idea 9 | to get rid of Previews you don't need. 10 | 11 | ### To delete a Preview: 12 | 13 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 14 | 2. Select the project where you want to delete a Preview. 15 | 3. Click into the repo where you want to delete a Preview. 16 | 4. Select the Preview you want to delete. 17 | 5. Click the {{% ui-text %}}Actions{{% /ui-text %}} drop-down menu for that Preview, and select 18 | {{% ui-text %}}Delete{{% /ui-text %}}. 19 | 6. Press the {{% ui-text %}}Yes{{% /ui-text %}} button to confirm. 20 | 21 | {{%expand "Visual Walkthrough" %}} 22 | 23 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 24 | 25 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 26 | 27 | Select the project where you want to delete a Preview. 28 | 29 | ![Select the project](/_images/select-a-project.png) 30 | 31 | Click into the repo where you want to delete a Preview. 32 | 33 | ![Click into Tugboat repository](/_images/click-into-tugboat-repository.png) 34 | 35 | Select the Preview you want to delete. 36 | 37 | ![Select a Preview build](/_images/select-a-preview.png) 38 | 39 | Click the {{% ui-text %}}Actions{{% /ui-text %}} drop-down menu for that Preview, and select 40 | {{% ui-text %}}Delete{{% /ui-text %}}. 41 | 42 | ![Click the Actions drop-down, and select Delete.](/_images/preview-action-delete.png) 43 | 44 | Press the {{% ui-text %}}Yes{{% /ui-text %}} button to confirm. 45 | 46 | ![Press Yes to confirm Delete](/_images/preview-action-confirm-delete.png) 47 | 48 | {{% /expand%}} 49 | -------------------------------------------------------------------------------- /content/building-a-preview/automate-previews/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Automate Previews" 3 | date = 2019-09-24T11:49:12-04:00 4 | weight = 4 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Automatically build, update, and delete Previews. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/building-a-preview/automate-previews/auto-delete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Auto-delete Previews" 3 | date: 2019-09-24T11:49:57-04:00 4 | weight: 5 5 | --- 6 | 7 | Each of the Previews in your Tugboat project count toward the total storage space available in your 8 | [project's billing tier](/tugboat-billing/tugboat-pricing/). By default, Tugboat is configured to automatically delete 9 | Previews when their corresponding git pull requests are merged or closed. 10 | 11 | ## To automatically delete Previews: 12 | 13 | If you want to change the setting to automatically delete Previews when their PRs are merged or closed: 14 | 15 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 16 | 2. Select the project where you want to configure auto-delete settings for Previews. 17 | 3. Click into {{% ui-text %}}Settings{{% /ui-text %}} for the repository. 18 | 4. Click the checkbox to change the setting. 19 | 5. Press the {{% ui-text %}}Save Configuration{{% /ui-text %}} button to save your changes. 20 | 21 | {{%expand "Visual Walkthrough" %}} 22 | 23 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 24 | 25 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 26 | 27 | Select the project where you want to configure auto-delete settings for Previews. 28 | 29 | ![Select the project](/_images/select-a-project.png) 30 | 31 | Click into {{% ui-text %}}Settings{{% /ui-text %}} for the repository. 32 | 33 | ![Go to Repository Settings](/_images/go-to-repository-settings.png) 34 | 35 | Click the checkbox to change the setting. 36 | 37 | ![Click the checkbox to turn auto-delete Preview on or off](/_images/auto-delete-preview-repository-settings.png) 38 | 39 | Press the {{% ui-text %}}Save Configuration{{% /ui-text %}} button to save your changes. 40 | 41 | ![Press the Save Configuration button](/_images/repository-settings-press-save-configuration.png) 42 | 43 | {{% /expand%}} 44 | -------------------------------------------------------------------------------- /content/building-a-preview/preview-deep-dive/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Preview Deep Dive" 3 | date = 2019-09-24T14:46:56-04:00 4 | weight = 10 5 | chapter = true 6 | pre = " " 7 | +++ 8 | 9 | Learn more about how Previews work, how you can optimize your Preview builds, and what you'll see when you click into a 10 | Preview in the Tugboat dashboard. 11 | 12 | {{%children%}} 13 | -------------------------------------------------------------------------------- /content/building-a-preview/share-a-preview/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Share a Preview" 3 | date = 2019-09-24T11:56:26-04:00 4 | weight = 3 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | How to manually share a Preview, or configure automated posting of Preview URLs. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/building-a-preview/share-a-preview/auto-share-url.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Auto Share Preview URLs" 3 | date: 2019-09-24T11:56:56-04:00 4 | weight: 3 5 | --- 6 | 7 | When you're using the Tugboat integration with [GitHub](/setting-up-tugboat/connect-with-your-provider/#github), 8 | [GitLab](/setting-up-tugboat/connect-with-your-provider/#gitlab) or 9 | [BitBucket](/setting-up-tugboat/connect-with-your-provider/#bitbucket), you can configure Tugboat to automatically post 10 | links to Previews as comments on pull requests. 11 | 12 | ### To configure Tugboat to automatically post Preview links: 13 | 14 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 15 | 2. Select the project where you want Tugboat to auto-post Preview links. 16 | 3. Click into {{% ui-text %}}Settings{{% /ui-text %}} for the repository. 17 | 4. Click the checkbox for {{% ui-text %}}Post Preview Links in Pull Request Comments{{% /ui-text %}} . 18 | 5. Press the {{% ui-text %}}Save Configuration{{% /ui-text %}} button to save your changes. 19 | 20 | {{% notice note %}} By default, Tugboat's comments to a linked git provider display as the person who linked the 21 | provider to Tugboat. That means the person who linked the repo will get notifications for every PR where Tugboat 22 | automatically posts a comment. If this person does not wish to receive notifications, you can 23 | [configure a Tugboat bot](/administer-tugboat-crew/add-tugboat-bot-to-team) to post the comments and receive those 24 | notifications. {{% /notice %}} 25 | 26 | {{%expand "Visual Walkthrough" %}} 27 | 28 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 29 | 30 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 31 | 32 | Select the project where you want Tugboat to auto-post Preview links. 33 | 34 | ![Select the project](/_images/select-a-project.png) 35 | 36 | Click into {{% ui-text %}}Settings{{% /ui-text %}} for the repository. 37 | 38 | ![Go to Repository Settings](/_images/go-to-repository-settings.png) 39 | 40 | Click the checkbox for {{% ui-text %}}Post Preview Links in Pull Request Comments{{% /ui-text %}} . 41 | 42 | ![Click the checkbox next to Post Preview Links in Pull Request Comments](/_images/share-preview-post-preview-links-in-pull-request-comments.png) 43 | 44 | Press the {{% ui-text %}}Save Configuration{{% /ui-text %}} button to save your changes. 45 | 46 | ![Press the Save Configuration button](/_images/share-preview-repo-settings-save-configuration.png) 47 | 48 | {{% /expand%}} 49 | -------------------------------------------------------------------------------- /content/building-a-preview/share-a-preview/manually-share-url.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Manually Share a Preview URL" 3 | date: 2019-09-24T11:56:48-04:00 4 | weight: 1 5 | --- 6 | 7 | Want to share a Preview link manually with Lisa in Product, or Dan the client? 8 | 9 | ### To manually get the link to a Preview you want to share: 10 | 11 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 12 | 2. Select the project that contains the Preview you want to share. 13 | 3. Click the name of the repo that contains the Preview you want to share. 14 | 4. Go to the Preview you want to share, and either open the Preview and copy the URL from the browser's address bar, or 15 | use the browser options to Copy Link on the {{% ui-text %}}Preview{{% /ui-text %}} button. 16 | 17 | Send that link to the person who needs to look at the Preview, and they'll be able to view it. Tugboat links are 18 | hard-to-guess secure URLs that are accessible to anyone with the link; that person doesn't need to be a member of your 19 | [Tugboat crew](/administer-tugboat-crew/user-admin/), or able to view the git repo where the code is hosted. 20 | 21 | {{%expand "Visual Walkthrough" %}} 22 | 23 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 24 | 25 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 26 | 27 | Select the project that contains the Preview you want to share. 28 | 29 | ![Select the project](/_images/select-a-project.png) 30 | 31 | Click the name of the repo that contains the Preview you want to share. 32 | 33 | ![Click into Tugboat repository](/_images/click-into-tugboat-repository.png) 34 | 35 | Go to the Preview you want to share, and either open the Preview and copy the URL from the browser's address bar, or use 36 | the browser options to Copy Link on the {{% ui-text %}}Preview{{% /ui-text %}} button. 37 | 38 | ![Manually share Preview](/_images/manually-share-preview.png) 39 | 40 | {{% /expand%}} 41 | -------------------------------------------------------------------------------- /content/building-a-preview/work-with-base-previews/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Using Base Previews" 3 | date = 2019-09-24T11:51:05-04:00 4 | weight = 2 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | To speed up your Preview builds, and reduce subsequent Preview builds to smaller files, set a Base Preview as a starting 10 | point for child Previews. 11 | 12 | {{%children%}} 13 | 14 | Want to learn more about Base Previews under the cover? Check out: 15 | [How Base Previews work](../preview-deep-dive/how-previews-work/#how-base-previews-work). 16 | -------------------------------------------------------------------------------- /content/building-a-preview/work-with-base-previews/delete-base-preview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Delete a Base Preview" 3 | date: 2019-09-24T11:53:17-04:00 4 | weight: 7 5 | --- 6 | 7 | Want to delete a Base Preview you're not using anymore? Keep in mind that if you delete a Base Preview that was used to 8 | generate child Previews, those child Previews will grow to their full size, which could put your project over the 9 | [limit of disk space](/tugboat-billing/tugboat-pricing/#how-does-tugboat-pricing-work) available to the project. If you 10 | don't want this, you can [stop using a Base Preview](../stop-using-base-preview/) to stop building new child Previews 11 | from this Preview, but preserve the current size of existing child Previews. 12 | 13 | {{% notice note %}} When you exceed the disk space limit in your project, you won't be able to build new Previews until 14 | you are under the project's disk space limit again. You can get under the project's space limit by 15 | [deleting Previews](../../administer-previews/delete-previews/), or 16 | [increasing your project's billing tier](/tugboat-billing/tugboat-pricing/#change-your-tugboat-plan). {{% /notice %}} 17 | 18 | ## To delete a Base Preview: 19 | 20 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 21 | 2. Select the project where you want to delete a Base Preview. 22 | 3. Click into the repo where you want to delete a Base Preview. 23 | 4. Click the {{% ui-text %}}Actions{{% /ui-text %}} drop-down menu for the Base Preview you want to delete, and select 24 | {{% ui-text %}}Delete{{% /ui-text %}}. 25 | 5. Click the checkbox next to {{% ui-text %}}Yes, delete this preview{{% /ui-text %}} and then press the 26 | {{% ui-text %}}Delete{{% /ui-text %}} button to confirm. 27 | 28 | {{%expand "Visual Walkthrough" %}} 29 | 30 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 31 | 32 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 33 | 34 | Select the project where you want to delete a Base Preview. 35 | 36 | ![Select the project](/_images/select-a-project.png) 37 | 38 | Click into the repo where you want to delete a Base Preview. 39 | 40 | ![Click into Tugboat repository](/_images/click-into-tugboat-repository.png) 41 | 42 | Click the {{% ui-text %}}Actions{{% /ui-text %}} drop-down menu for the Base Preview you want to delete, and select 43 | {{% ui-text %}}Delete{{% /ui-text %}}. 44 | 45 | ![Click the Actions drop-down, and select Delete.](/_images/base-preview-actions-delete.png) 46 | 47 | Click the checkbox next to {{% ui-text %}}Yes, delete this preview{{% /ui-text %}} and then press the 48 | {{% ui-text %}}Delete{{% /ui-text %}} button to confirm. 49 | 50 | ![Confirm Preview delete and press Delete button](/_images/base-preview-press-delete-button.png) 51 | 52 | {{% /expand%}} 53 | -------------------------------------------------------------------------------- /content/building-a-preview/work-with-base-previews/stop-using-base-preview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Stop Using a Base Preview" 3 | date: 2019-09-24T11:52:51-04:00 4 | weight: 5 5 | --- 6 | 7 | When you no longer want new Preview Builds to use a Base Preview; for example, if you've moved to a new concept, want to 8 | switch to a development branch or otherwise want to stop using a Base Preview; you can remove that Base Preview. This 9 | keeps the Base Preview and child Previews in your Tugboat project, but new builds will no longer start with this Base 10 | Preview. If you want to delete a Base Preview, instead, see: [Delete a Base Preview](../delete-base-preview/). 11 | 12 | ## To stop using a Base Preview: 13 | 14 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 15 | 2. Select the project where you want to stop using a Base Preview. 16 | 3. Click into the repo where you want to stop using a Base Preview. 17 | 4. Find the Preview you'd like to stop using as a Base Preview, and go into {{% ui-text %}}Settings{{% /ui-text %}} for 18 | that Preview. 19 | 5. Click the checkbox next to {{% ui-text %}}Use this Preview as a Base Preview{{% /ui-text %}} to deselect the Preview 20 | as a Base Preview. 21 | 6. Press the {{% ui-text %}}Save Configuration{{% /ui-text %}} button. 22 | 23 | The deselected Preview will disappear from the Base Preview section of the dashboard, and subsequent Preview builds - 24 | including automated builds from git provider integrations - will no longer start from that Base Preview. 25 | 26 | {{%expand "Visual Walkthrough" %}} 27 | 28 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 29 | 30 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 31 | 32 | Select the project where you want to stop using a Base Preview. 33 | 34 | ![Select the project](/_images/select-project-to-set-base-preview.png) 35 | 36 | Click into the repo where you want to stop using a Base Preview. 37 | 38 | ![Click into Tugboat repository](/_images/select-repo-to-set-base-preview.png) 39 | 40 | Find the Preview you'd like to stop using as a Base Preview, and go into {{% ui-text %}}Settings{{% /ui-text %}} for 41 | that Preview. 42 | 43 | ![Go into Settings for the Preview you want to stop using as a Base Preview](/_images/go-into-settings-for-base-preview-you-want-to-stop-using.png) 44 | 45 | Click the checkbox next to {{% ui-text %}}Use this Preview as a Base Preview{{% /ui-text %}} to deselect the Preview as 46 | a Base Preview. 47 | 48 | ![Click checkbox to deselect a Base Preview](/_images/click-checkbox-to-deselect-base-preview.png) 49 | 50 | Press the {{% ui-text %}}Save Configuration{{% /ui-text %}} button. 51 | 52 | ![Press the Save Configuration button](/_images/stop-using-base-preview-press-save-configuration.png) 53 | 54 | {{% /expand%}} 55 | -------------------------------------------------------------------------------- /content/building-a-preview/work-with-base-previews/view-base-preview-types.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "View Base Preview Types" 3 | date: 2019-09-24T11:52:38-04:00 4 | weight: 4 5 | --- 6 | 7 | Do you want to view all Base Previews of a specific type? 8 | 9 | ## To view all Base Previews of a specific type: 10 | 11 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 12 | 2. Select the project where you want to view Base Previews of a given type. 13 | 3. Click into the repo where you want to view Base Previews of a specific type. 14 | 4. By default, you'll see {{% ui-text %}}All{{% /ui-text %}} Base Previews. Select 15 | {{% ui-text %}}Repository{{% /ui-text %}} or {{% ui-text %}}Branch{{% /ui-text %}} to view only Base Previews of that 16 | type. 17 | 18 | For details about Base Preview Types, see: 19 | [Base Preview Auto Select](../../preview-deep-dive/how-previews-work/#base-preview-auto-select). 20 | 21 | {{%expand "Visual Walkthrough" %}} 22 | 23 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 24 | 25 | ![Go to username -> My Projects](/_images/go-to-user-my-projects.png) 26 | 27 | Select the project where you want to view Base Previews of a given type. 28 | 29 | ![Select the project](/_images/select-project-to-set-base-preview.png) 30 | 31 | Click into the repo where you want to view Base Previews of a specific type. 32 | 33 | ![Select the Tugboat repository](/_images/select-repo-to-set-base-preview.png) 34 | 35 | By default, you'll see {{% ui-text %}}All{{% /ui-text %}} Base Previews. 36 | 37 | ![Default view of all Base Preview types](/_images/view-base-preview-types-default-all.png) 38 | 39 | Select {{% ui-text %}}Repository{{% /ui-text %}} or {{% ui-text %}}Branch{{% /ui-text %}} to view only Base Previews of 40 | that type. 41 | 42 | ![View only Branch Base Previews](/_images/verify-base-preview-type-change-view-branch-base-previews.png) 43 | 44 | {{% /expand%}} 45 | -------------------------------------------------------------------------------- /content/faq/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "FAQ" 3 | date = 2019-09-19T10:58:25-04:00 4 | weight = 20 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | You've got questions? We've got answers! 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/faq/compatible-technologies.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Compatible Technologies" 3 | date: 2019-09-26T15:23:53-04:00 4 | weight: 1 5 | --- 6 | 7 | ## Does Tugboat work with...? 8 | 9 | Tugboat supports pretty much anything that runs on Linux. Look through our 10 | [prebuilt service images](/reference/tugboat-images/) to see what we currently have available. If something that you 11 | need is missing, let us know, and we will work with you to get it added to the list. 12 | 13 | People frequently ask about whether Tugboat works with these technologies: 14 | 15 | - **Acquia Cloud?** Yes! 16 | - **Pantheon?** Yes! We even have a [tutorial](/starter-configs/tutorials/pantheon/) to show you how. 17 | - **GitHub, GitLab, BitBucket?** Yes! Check out: 18 | [Setting up Tugboat -> Connect with your git provider](/setting-up-tugboat/connect-with-your-provider/) 19 | - **Self-hosted git repositories?** Yes! See: 20 | [Setting up Tugboat -> Generic git server](/setting-up-tugboat/connect-with-your-provider/#generic-git-server) 21 | - **My own images?** Yes! See: 22 | [Setting up Services -> Specify a Service image](/setting-up-services/how-to-set-up-services/specify-a-service-image/) 23 | - **My existing database?** Yes! Take a look at 24 | [Starter Configs -> Import a MySQL Database](/starter-configs/code-snippets/import-mysql-database/) for an example. 25 | 26 | ## Does Tugboat have a Slack integration? 27 | 28 | Tugboat does not currently have a direct Slack integration. However, you can get very similar functionality if you're 29 | using a git integration with Slack: 30 | 31 | - [GitHub for Slack](https://github.com/integrations/slack) 32 | - [GitLab Slack Application](https://docs.gitlab.com/ee/user/project/integrations/gitlab_slack_application.html) 33 | - [BitBucket Cloud for Slack](https://confluence.atlassian.com/bitbucket/bitbucket-cloud-for-slack-945096776.html) 34 | 35 | With one of these integrations configured, use 36 | [Tugboat's Repository Settings for git provider integrations](/setting-up-tugboat/select-repo-settings/#modify-settings-for-your-github-gitlab-or-bitbucket-integration) 37 | to share details about your Tugboat Previews, such as: 38 | 39 | - Set Pull Request Status 40 | - Set Pull Request Deployment Status 41 | - Post Preview Links in Pull Request Comments 42 | 43 | When using these settings, Tugboat's updates to your git repository can be carried through your git Slack integration 44 | into your relevant Slack channels. 45 | -------------------------------------------------------------------------------- /content/faq/tugboat-ip-addresses.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tugboat IP Addresses" 3 | date: 2019-09-26T15:27:00-04:00 4 | weight: 3 5 | --- 6 | 7 | Do you need to create an allow list for Tugboat's IP addresses so you can access something behind a firewall? We've got 8 | you covered! Our IPs sometimes change due to maintenance, so here's how you can use `dig` to perform a DNS lookup and 9 | check our IPs: 10 | 11 | ```sh 12 | $ dig txt +noall +answer _egress.tugboatqa.com 13 | _egress.tugboatqa.com. 2417 IN TXT "69.164.215.171,96.126.107.200,66.175.213.222,104.237.144.198,23.239.12.71,45.33.67.152" 14 | ``` 15 | -------------------------------------------------------------------------------- /content/lighthouse/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Google Lighthouse Integration" 3 | date = 2020-09-23T10:00:00-04:00 4 | weight = 5.5 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Audit your Tugboat Previews for accessibility, SEO, and more using our Google Lighthouse integration. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/lighthouse/view-lighthouse-reports.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "View Lighthouse Reports" 3 | date: 2020-09-23T15:30:03-04:00 4 | weight: 2 5 | --- 6 | 7 | When you configure Tugboat to generate Google Lighthouse reports for your web app or website, you'll see a Lighthouse 8 | Reports status on your pull requests. You can click the **Details** link to go directly to the Lighthouse reports in the 9 | Tugboat Preview Dashboard. 10 | 11 | ![Screenshot showing a "Tugboat - Lighthouse Reports" passed status](/_images/lighthouse-reports-on-github-pr.png) 12 | 13 | Alternately, to view Lighthouse reports from within Tugboat, here's how to get to the Preview Dashboard: 14 | 15 | ## To view Lighthouse reports: 16 | 17 | 1. Click into a Preview that has finished building. 18 | 2. Scroll down past the Services and you'll see the Lighthouse Reports pane. 19 | 3. Click into one of the numbers to view the specifics for that category's audit, or click the Details link to view the 20 | full Lighthouse report. 21 | 22 | Inside the Lighthouse report, you'll see a list of audit items that were checked to provide your score. For more 23 | information on what you'll see in Lighthouse reports, take a look at: 24 | [Using Lighthouse -> What do Lighthouse reports measure?](../using-lighthouse/#what-do-lighthouse-reports-measure) 25 | 26 | You'll also see an option to {{% ui-text %}}Regenerate{{% /ui-text %}} Lighthouse reports. 27 | 28 | {{% notice info %}} While the Preview is building, you'll see: "Unavailable while preview is building" in the Lighthouse 29 | Reports pane. After the Preview build has completed, the Lighthouse reports will generate. {{% /notice %}} 30 | 31 | {{%expand "Visual Walkthrough" %}} 32 | 33 | Click into a Preview that has finished building; 34 | 35 | ![Click into Preview Dashboard](/_images/visual-diffs-click-into-preview.png) 36 | 37 | Scroll down past the Services, and you'll see the Lighthouse Reports pane; 38 | 39 | ![View Lighthouse Reports Pane](/_images/lighthouse-reports-pane.png) 40 | 41 | Click into one of the numbers to view the specifics for that category's audit, or click the Details link to view the 42 | full Lighthouse report. 43 | 44 | ![Click into a Lighthouse audit category or view the full Lighthouse report](/_images/lighthouse-click-into-category-or-details.png) 45 | 46 | Inside the Lighthouse report, you'll see a list of audit items that were checked to provide your score. 47 | 48 | ![Screenshot listing items checked in the Lighthouse performance audit](/_images/lighthouse-performance-report.png) 49 | 50 | You'll also see an option to {{% ui-text %}}Regenerate{{% /ui-text %}} Lighthouse reports. 51 | 52 | ![Regenerate Lighthouse reports](/_images/lighthouse-regenerate-reports.png) 53 | 54 | {{% /expand%}} 55 | -------------------------------------------------------------------------------- /content/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/content/logo.png -------------------------------------------------------------------------------- /content/manage-users/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Manage Users" 3 | date = 2019-09-19T10:35:44-04:00 4 | weight = 10 5 | chapter = true 6 | pre = "" 7 | aliases = ['/administer-tugboat-crew'] 8 | +++ 9 | 10 | Add users, remove users, or change user permissions. 11 | 12 | {{%children%}} 13 | -------------------------------------------------------------------------------- /content/manage-users/add-a-user.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Add a User" 3 | date: 2019-09-26T15:15:25-04:00 4 | weight: 1 5 | aliases: 6 | - "/administer-tugboat-crew/add-a-user" 7 | --- 8 | 9 | ## To add a user to a project 10 | 11 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 12 | 2. Select the project where you want to add the user. 13 | 3. Click the {{% ui-text %}}Project Settings{{% /ui-text %}} link to the right of the project's title. 14 | 4. In the {{% ui-text %}}Invite a User to This Project{{% /ui-text %}} section, add the recipient's email address, and 15 | select the appropriate [user type](../user-admin/) from the drop-down. 16 | 5. Press the big blue {{% ui-text %}}Invite{{% /ui-text %}} button! 17 | 18 | The user you've invited will get an email from `support@tugboatqa.com` with a link to accept the invitation. 19 | 20 | {{% notice info %}} User permissions in Tugboat are handled on a per-project basis. When users have access to a project, 21 | they have access to all the repositories within that project. When inviting users to your project, consider whether any 22 | of your repos contain sensitive data; you may want to split those repos out into a different project, where only a 23 | subset of users get access. {{% /notice %}} 24 | 25 | {{%expand "Visual Walkthrough" %}} 26 | 27 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 28 | 29 | ![Go to username -> My Projects](../../_images/go-to-user-my-projects.png) 30 | 31 | Select the project where you want to add the user. 32 | 33 | ![Select the project](../../_images/select-a-project.png) 34 | 35 | Click the {{% ui-text %}}Project Settings{{% /ui-text %}} link to the right of the project's title. 36 | 37 | ![Click Project Settings](../../_images/click-project-settings-link.png) 38 | 39 | In the {{% ui-text %}}Invite a User to This Project{{% /ui-text %}} section, add the recipient's email address, and 40 | select the appropriate [user type](../user-admin/) from the drop-down. 41 | 42 | ![Add user's email address and select permissions](../../_images/add-user-email-and-permissions.png) 43 | 44 | Press the big blue {{% ui-text %}}Invite{{% /ui-text %}} button! 45 | 46 | ![Press the Invite button](../../_images/add-user-press-invite-button.png) 47 | 48 | {{% /expand%}} 49 | 50 | ### User doesn't see Tugboat invite 51 | 52 | If the user doesn't see the Tugboat invite: 53 | 54 | - Have them check Inboxes and Spam for this email address, or; 55 | - {{% ui-text %}}Copy Link{{% /ui-text %}} and share it another way from the Pending Invites section of the Project 56 | Settings, or; 57 | - Hit the {{% ui-text %}}Re-send{{% /ui-text %}} link from the Pending Invites section of the Project Settings. 58 | 59 | ![Copy Link or Re-Send from Pending Invites](../../_images/add-user-copy-link-resend.png) 60 | -------------------------------------------------------------------------------- /content/manage-users/change-permissions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Change User Permissions" 3 | date: 2019-09-26T15:15:58-04:00 4 | lastmod: 2020-04-17T17:00:00-04:00 5 | weight: 3 6 | aliases: 7 | - "/administer-tugboat-crew/change-permissions" 8 | --- 9 | 10 | ## Change user permissions 11 | 12 | To change user permissions: 13 | 14 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 15 | 2. Select the project where you want to change user permissions. 16 | 3. Click the {{% ui-text %}}Project Settings{{% /ui-text %}} link to the right of the project's title. 17 | 4. In the {{% ui-text %}}Manage Users{{% /ui-text %}} section, look for the user whose permissions you want to change, 18 | and select the appropriate [user type](../user-admin/) from the {{% ui-text %}}Access{{% /ui-text %}} drop-down. 19 | 20 | {{%expand "Visual Walkthrough" %}} 21 | 22 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 23 | 24 | ![Go to username -> My Projects](../../_images/go-to-user-my-projects.png) 25 | 26 | Select the project where you want to change user permissions. 27 | 28 | ![Select the project](../../_images/select-a-project.png) 29 | 30 | Click the {{% ui-text %}}Project Settings{{% /ui-text %}} link to the right of the project's title. 31 | 32 | ![Click Project Settings](../../_images/click-project-settings-link.png) 33 | 34 | In the {{% ui-text %}}Manage Users{{% /ui-text %}} section, look for the user whose permissions you want to change, and 35 | select the appropriate [user type](../user-admin/) from the {{% ui-text %}}Access{{% /ui-text %}} drop-down. 36 | 37 | ![Go to Manage Users, click the Access drop-down and select new permissions](../../_images/change-user-permissions-access-drop-down.png) 38 | 39 | {{% /expand%}} 40 | -------------------------------------------------------------------------------- /content/manage-users/remove-a-user.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Remove a User" 3 | date: 2019-09-26T15:15:49-04:00 4 | weight: 2 5 | aliases: 6 | - "/administer-tugboat-crew/remove-a-user" 7 | --- 8 | 9 | ## To remove a user from a project 10 | 11 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 12 | 2. Select the project where you want to remove the user. 13 | 3. Click the {{% ui-text %}}Project Settings{{% /ui-text %}} link to the right of the project's title. 14 | 4. In the {{% ui-text %}}Manage Users{{% /ui-text %}} section, look for the user you want to remove, and click the 15 | Remove link. 16 | 17 | {{% notice info %}} An [Owner user](../user-admin/#owner-permissions) cannot be removed from a Tugboat project without 18 | first [giving another user Owner permissions](../change-permissions/). {{% /notice %}} 19 | 20 | {{%expand "Visual Walkthrough" %}} 21 | 22 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 23 | 24 | ![Go to username -> My Projects](../../_images/go-to-user-my-projects.png) 25 | 26 | Select the project where you want to remove the user. 27 | 28 | ![Select the project](../../_images/select-a-project.png) 29 | 30 | Click the {{% ui-text %}}Project Settings{{% /ui-text %}} link to the right of the project's title. 31 | 32 | ![Click Project Settings](../../_images/click-project-settings-link.png) 33 | 34 | In the {{% ui-text %}}Manage Users{{% /ui-text %}} section, look for the user you want to remove, and click the Remove 35 | link. 36 | 37 | ![Go to Manage Users and click Remove](../../_images/remove-user-click-remove-link.png) 38 | 39 | {{% /expand%}} 40 | -------------------------------------------------------------------------------- /content/manage-users/user-admin.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "User Permission Levels" 3 | date: 2019-09-19T10:36:14-04:00 4 | lastmod: 2020-04-17T17:00:00-04:00 5 | weight: 4 6 | aliases: 7 | - "/administer-tugboat-crew/user-admin" 8 | --- 9 | 10 | ### User permission levels explained 11 | 12 | Tugboat has four different types of users: 13 | 14 | - [Owner](#owner-permissions) 15 | - [Admin](#admin-permissions) 16 | - [User](#user-permissions) 17 | - [Read-only](#read-only-permissions) 18 | 19 | #### Owner permissions 20 | 21 | Owner users can: 22 | 23 | - Manage billing information. This information is disabled if the company is paying with a purchase order. 24 | 25 | Owners can also do everything the [admin user](#admin-permissions) and [general user](#user-permissions) can do. 26 | 27 | #### Admin permissions 28 | 29 | Admin users can: 30 | 31 | - Add and remove users from a project, and change user permissions. Admin users can administer other admin users, though 32 | they cannot remove themselves from a project. 33 | - Add repositories to the project. 34 | - Manage the repository configuration interface. This includes things like 35 | [changing repository settings](/setting-up-tugboat/select-repo-settings/#change-repository-settings), environment 36 | variables and SSH keys. 37 | - Delete repositories. 38 | - Delete the entire project. 39 | - Rename the project. 40 | 41 | Admin can also do everything the [general user](#user-permissions) can do. 42 | 43 | #### User permissions 44 | 45 | Tugboat's general User's permissions include: 46 | 47 | - View the repository configuration interface. This includes things like 48 | [repository settings](/setting-up-tugboat/select-repo-settings/#change-repository-settings), environment variables and 49 | SSH keys. 50 | - Manage Previews. Create, remove, rebuild, or lock Previews. 51 | - Manage Base Previews. 52 | - Shell access to previews. Manage visual diff screenshots. View build logs. 53 | 54 | #### Read-only permissions 55 | 56 | Tugboat users with Read-only permissions can: 57 | 58 | - View a list of all Previews, see build logs and visual diff screenshots. 59 | - Read-only users may create additional visual diff screenshots. 60 | 61 | These users have no access to anything else. 62 | -------------------------------------------------------------------------------- /content/reference/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Reference" 3 | date = 2019-09-19T13:02:56-04:00 4 | weight = 18 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | The following provide reference material for various aspects of Tugboat, such as Tugboat configuration, Docker images, 10 | environment variables, and the like. 11 | 12 | {{%children%}} 13 | -------------------------------------------------------------------------------- /content/reference/tugboat-community-images.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tugboat Community Images" 3 | date: 2020-07-10T11:26:28-04:00 4 | weight: 7 5 | --- 6 | 7 | In addition to our officially maintained [Tugboat Docker images](/reference/tugboat-images/), these unofficial Docker 8 | images created by community Tugboat users may be useful when building your Tugboat Previews. 9 | 10 | | Image Purpose | Usage | Documentation | 11 | | :-------------------------------------------------------------------------------------------------------- | :----------------------------------- | ---------------------------------------------------------------------- | 12 | | **Drupal Module or Theme** [{{< icon class="fas fa-link" title="Anchor link" >}}](#q0rban-tugboat-drupal) | `image: q0rban/tugboat-drupal:[TAG]` | [README](https://github.com/q0rban/tugboat-drupal/blob/main/README.md) | 13 | 14 | {{% notice info %}} These are unofficial images that we do not maintain, so Tugboat's Support service does not cover 15 | these images. To request changes or updates to the images, or information and documentation on how to use them, please 16 | contact the image maintainers. {{% /notice %}} 17 | 18 | ## Share a Community Image 19 | 20 | If you've created a custom Docker image for your Tugboat config that you'd like to share, please open a pull request on 21 | our [TugboatQA/docs GitHub repository](https://github.com/TugboatQA/docs), or reach out to us via our 22 | [regular support channels](/support/). 23 | 24 | We request that you provide a README or other documentation detailing the purpose of your image, as well as any 25 | important usage details, such as a corresponding Tugboat `config.yml` or available tags. 26 | -------------------------------------------------------------------------------- /content/setting-up-services/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Setting Up Services" 3 | date = 2019-09-17T11:24:32-04:00 4 | weight = 2 5 | chapter = true 6 | pre = "2. " 7 | +++ 8 | 9 | How to set up Services, and more about images. 10 | 11 | {{%children depth="3"%}} 12 | 13 | A Tugboat Service plays the role of what a server might provide in a production environment. A service can be a web 14 | server, a database server, a cache store, etc. Services form the core of your 15 | [Config file](/setting-up-tugboat/create-a-tugboat-config-file/), working together to build a 16 | [Preview](/building-a-preview/). 17 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "How to Set Up Services" 3 | date = 2019-09-19T13:02:25-04:00 4 | weight = 1 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Taking you step-by-step through the process to set up Services in your config.yml file. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/clone-git-repositories-into-your-services.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Clone Git Repositories Into Your Services" 3 | date = 2019-09-19T13:04:53-04:00 4 | weight = 7 5 | +++ 6 | 7 | When Tugboat runs, it clones your git repository into [your `default` Service](../define-a-default-service/). 8 | Optionally, you can also clone a copy of your git repository into other Services. 9 | 10 | To explicitly request that a Service has access to the git repository, specify the `checkout` key in the Service 11 | definition. This is especially useful if there are Service-specific scripts or test data files committed to your git 12 | repository. 13 | 14 | ```yaml 15 | services: 16 | apache: 17 | image: tugboatqa/httpd:2.4 18 | default: true 19 | mysql: 20 | image: tugboatqa/mysql:5.6 21 | checkout: true 22 | ``` 23 | 24 | In this example, both the `apache` and `mysql` services get a clone of the git repository, checked out to the git 25 | branch, tag, commit, or pull request that the preview is created for. The path where the git repository is cloned is 26 | available in an [environment variable](/reference/environment-variables/) named `$TUGBOAT_ROOT`. 27 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/define-a-default-service.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Define a Default Service" 3 | date = 2019-09-19T13:04:10-04:00 4 | weight = 4 5 | +++ 6 | 7 | Every [Config file](/setting-up-tugboat/create-a-tugboat-config-file/) requires a default Service. The default Service 8 | is where HTTP requests are routed when a [Preview's URL](/building-a-preview/share-a-preview/) is visited by a user. 9 | 10 | If your Config file only has one Service, that Service automatically becomes the default Service. 11 | 12 | If your Config file contains multiple Services, you must designate one of them as the `default`. Specify a default 13 | Service by adding a `default` key to the Service, with a value of `true`. 14 | 15 | ```yaml 16 | services: 17 | apache: 18 | image: tugboatqa/httpd:2.4 19 | default: true 20 | mysql: 21 | image: tugboatqa/mysql:5.6 22 | ``` 23 | 24 | {{% notice note %}} Setting a Service as the `default` - including when the Service is automatically designated 25 | `default` because it's the only Service - also implies that port 80 is exposed to the Tugboat Proxy, and that the git 26 | repository is cloned to /var/lib/tugboat. To override the Service HTTP port, see: 27 | [Expose a Service HTTP port](../expose-a-service-http-port/). To override the git repository clone destination, see: 28 | [Clone Git repositories into your Services](../clone-git-repositories-into-your-services/). {{% /notice %}} 29 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/expose-a-service-http-port.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Expose a Service HTTP Port" 3 | date = 2019-09-19T13:04:27-04:00 4 | weight = 5 5 | +++ 6 | 7 | Every Service in a Preview gets a unique URL. That URL is accessible if: 8 | 9 | - An HTTP service is running on the Service, AND; 10 | - The port is exposed to the Tugboat Proxy. 11 | 12 | To expose a port, include an `expose` key in the Service definition with the port number that the HTTP service is 13 | listening on. 14 | 15 | ```yaml 16 | services: 17 | node: 18 | image: tugboatqa/node:10 19 | expose: 3000 20 | ``` 21 | 22 | In this example, the Tugboat Proxy forwards requests to the service's URL through to a nodejs service running on 23 | port 3000. 24 | 25 | There are other options that affect how the proxy routing is handled. These advanced options can usually be left to 26 | their default settings. Check out our [Tugboat Configuration reference](/reference/tugboat-configuration/) for a 27 | complete list. 28 | 29 | {{% notice note %}} When a Service is set as the `default`, port 80 is automatically exposed. You can override this by 30 | using the `expose` key to explicitly set an alternate port. {{% /notice %}} 31 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/name-your-service.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Name Your Service" 3 | date = 2019-09-19T13:03:33-04:00 4 | weight = 1 5 | +++ 6 | 7 | The top level of your [Config file](/setting-up-tugboat/create-a-tugboat-config-file/) is a `services` key whose value 8 | is a list of Services. 9 | 10 | ```yaml 11 | services: 12 | service1: 13 | service2: 14 | service3: 15 | ``` 16 | 17 | Service names are arbitrary, but they act as the internal host name for the Service. This is the name other Services in 18 | the Preview would use to refer to the Service. As a result, there are a few rules you must observe when naming Services: 19 | 20 | - Service names may only include the characters `a-z`, `0-9`, and `-`. 21 | - Service names are limited to 39 characters. 22 | 23 | As an example, a set of Services that serve a PHP-based site with a MySQL database and a Redis cache might be: 24 | 25 | ```yaml 26 | services: 27 | apache: 28 | mysql: 29 | redis: 30 | ``` 31 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/running-a-background-process.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Running a Background Process" 3 | date = 2019-09-19T13:05:11-04:00 4 | lastmod = 2020-07-20T15:00:00-04:00 5 | weight = 8 6 | +++ 7 | 8 | A long-running background process in Tugboat needs some special care. If you try to add a background-process to your 9 | [config file](/setting-up-tugboat/create-a-tugboat-config-file/) in the conventional way, Tugboat will think the Preview 10 | has not finished building, and it will be stuck in the "building" state until it eventually times out and fails. 11 | 12 | {{% notice info %}} The reason Tugboat needs to wait for all of the `build` commands to finish is that we stop the 13 | Services after a Preview build is finished in order to take a snapshot. {{% /notice %}} 14 | 15 | You can use two techniques to run a background process: 16 | 17 | - [Use a Tugboat image that contains `runit` to start a build script independent of the Preview build process.](#use-runit-in-an-official-tugboat-image) 18 | - [Use the `start` command to start a background process](#use-the-start-command) 19 | 20 | ## Use runit in an official Tugboat image 21 | 22 | Our [prebuilt images](../../service-images/using-tugboat-images/) use [runit](http://smarden.org/runit/) to start and 23 | manage background processes. 24 | 25 | To add your own background process that starts when the Service starts, create a directory 26 | `/etc/service/yourprocessname` and a script at `/etc/service/yourprocessname/run` to tell `runit` how to start your 27 | process. 28 | 29 | For example, the following `run` script would start Apache: 30 | 31 | ``` 32 | #!/bin/sh 33 | exec httpd-foreground 34 | ``` 35 | 36 | Below is an example of how you might configure a Node.JS process to start. Keep in mind that `runit` will try to start 37 | the process as soon as the `run` script is present in the Service directory. So, set it up after any other build steps 38 | that it might depend on. 39 | 40 | ```yaml 41 | services: 42 | node: 43 | image: tugboatqa/node:8 44 | commands: 45 | init: 46 | - mkdir -p /etc/service/node 47 | - echo "#!/bin/sh" > /etc/service/node/run 48 | - echo "npm start --prefix ${TUGBOAT_ROOT}" >> /etc/service/node/run 49 | - chmod +x /etc/service/node/run 50 | ``` 51 | 52 | ## Use the start command 53 | 54 | If you're not using a Tugboat image that contains `runit` to start a long-running background process, another option is 55 | to use the `start` service command. Commands that you include in `start` in your `.tugboat/config.yml` will run every 56 | time the container starts. You might use this to warm a page cache, for example. 57 | 58 | Start works like other 59 | [service commands](/setting-up-services/how-to-set-up-services/leverage-service-commands/#service-commands-to-run-after-preview-build), 60 | so if you wanted to do something like starting a Node.JS process above but _without_ using `runit`, your config might 61 | look something like this: 62 | 63 | ```yaml 64 | services: 65 | php: 66 | commands: 67 | start: 68 | - npm start --prefix ${TUGBOAT_ROOT} & 69 | ``` 70 | -------------------------------------------------------------------------------- /content/setting-up-services/how-to-set-up-services/set-the-document-root-path.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Set the Document Root Path" 3 | date = 2019-09-19T13:04:39-04:00 4 | weight = 6 5 | +++ 6 | 7 | Tugboat does not try to guess where your document root lives in your repository. Likewise, it does not try to guess 8 | where a web server image expects to serve the default document root from. This means you are responsible for making this 9 | link in your [configuration file](/setting-up-tugboat/create-a-tugboat-config-file/) 10 | 11 | Each web server image expects the document root to be in a different location. This is a side effect of using the 12 | [Official Docker Images](https://docs.docker.com/docker-hub/official_repos/). The 13 | [images provided by Tugboat](../../service-images/using-tugboat-images/) store this document root location in an 14 | environment variable named `$DOCROOT` for convenience. 15 | 16 | Use this configuration to link the document root to a directory named `/docroot` in your git repository. This works for 17 | the following images provided by Tugboat: `tugboatqa/httpd`, `tugboatqa/nginx`, `tugboatqa/php:apache` 18 | 19 | ```yaml 20 | services: 21 | apache: 22 | image: tugboatqa/httpd 23 | commands: 24 | init: 25 | - ln -snf "${TUGBOAT_ROOT}/docroot" "${DOCROOT}" 26 | ``` 27 | -------------------------------------------------------------------------------- /content/setting-up-services/service-images/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Service Images" 3 | date = 2019-09-19T13:02:44-04:00 4 | weight = 2 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Details about Service images under the hood, including how to use your own Docker image and Tugboat-maintained images. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/setting-up-services/service-images/docker-pull.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Docker Pull under the hood" 3 | date: 2019-09-19T13:22:39-04:00 4 | weight: 5 5 | --- 6 | 7 | Familiar with Docker, and looking for more specific information about when images get pulled or updated in Tugboat? 8 | Here's what you need to know about `docker pull` under the hood: 9 | 10 | - [When does Tugboat pull a Docker image?](#when-does-tugboat-pull-a-docker-image) 11 | - [When does Tugboat update a Docker image?](#when-does-tugboat-update-a-docker-image) 12 | 13 | ## When does Tugboat pull a Docker image? 14 | 15 | Tugboat doesn't pull the images in your config file every time you open a pull request, or refresh a Preview; it only 16 | does a `docker pull` (under the hood) when: 17 | 18 | - You [build a Preview](/building-a-preview/administer-previews/build-previews/) from scratch (without using a Base 19 | Preview) 20 | - You [Rebuild](/building-a-preview/administer-previews/change-or-update-previews/#rebuild-previews) a Preview that was 21 | not built from a Base Preview 22 | 23 | Otherwise, Tugboat relies on the images you pulled when the Preview was first created; Preview Actions like 24 | [Refreshing a Preview](/building-a-preview/administer-previews/change-or-update-previews/#refresh-previews), 25 | [Cloning a Preview](/building-a-preview/administer-previews/build-previews/#duplicate-a-preview), or 26 | [automatically generating a Preview from a pull request](/building-a-preview/automate-previews/auto-generate/) when 27 | you're using a Base Preview - those things all keep the Docker images you referenced when you first built the Preview. 28 | 29 | ## When does Tugboat update a Docker image? 30 | 31 | Because Tugboat pulls your Docker images at the beginning of the Preview build process, it won't `docker pull` an 32 | updated image unless you kick off the Preview build process from scratch again. 33 | 34 | For more info, see: 35 | [Why Build phases matter](/building-a-preview/preview-deep-dive/how-previews-work/#why-build-phases-matter). 36 | 37 | {{% notice tip %}} If your Tugboat Preview isn't pulling your latest Docker image tag, it might be because you're 38 | building from a Base Preview. If that's the case, you'll need to 39 | [Rebuild your Base Preview](/building-a-preview/work-with-base-previews/change-or-update/#change-a-base-preview), which 40 | executes an API call to `docker pull` under the hood to grab the image tag referenced in your 41 | [config file](/setting-up-tugboat/create-a-tugboat-config-file). If that still doesn't get you the image you expect, 42 | check your config file to see which [image tag](../image-version-tags/) you're pulling; you may need to change the 43 | reference to latest, or a specific image tag, to get the result you want. {{% /notice %}} 44 | -------------------------------------------------------------------------------- /content/setting-up-services/service-images/image-version-tags.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Docker Image Version Tags Primer" 3 | date: 2019-09-19T13:20:53-04:00 4 | weight: 1 5 | --- 6 | 7 | Use tags to indicate specific versions of an image, if needed. In 8 | [our how to call a Service image from Docker Hub example](/setting-up-services/how-to-set-up-services/specify-a-service-image/#how-to-call-a-service-image-from-docker-hub), 9 | we called: 10 | 11 | ```yaml 12 | services: 13 | apache: 14 | image: tugboatqa/httpd:2.4 15 | mysql: 16 | image: tugboatqa/mysql:5.6 17 | ``` 18 | 19 | In this example, we called versions `2.4` and `5.6` for the `httpd` and `mysql` images. These are Docker image version 20 | tags. 21 | 22 | You can specify version tags in a few different ways: 23 | 24 | - [Point-release version tags](#point-release-version-tags) 25 | - [Major version tags](#major-version-tags) 26 | - [Latest version tags](#latest-version-tags) 27 | 28 | {{% notice note %}} If you don't need a specific version of a Service image, you can leave the tag off of the image 29 | call. When you don't specify a tag, you'll get the latest version of that image. However, because `latest` pulls the 30 | newest version of an image, it could introduce a breaking change, so we recommend specifying major/minor versions as 31 | needed. {{% /notice %}} 32 | 33 | If you're not sure which version tag to use, you can always browse to the service image on 34 | [Docker Hub](https://hub.docker.com/) and check out what tags are available. 35 | 36 | ![Browse image tags on Docker Hub](../../../_images/browse-tags-on-docker-hub.png) 37 | 38 | ## Point-release version tags: 39 | 40 | Using specific version tags helps prevent breaking changes that come along with incremental updates. In our example 41 | above, we've called `tugboatqa/mysql:5.6` instead of `tugboatqa/mysql:5`. 42 | 43 | ## Major version tags 44 | 45 | If you want to make sure you're using a specific major version, but don't care about point releases, specify something 46 | like `tugboatqa/node:10` to ensure you always use the latest available minor release of node 10.x. 47 | 48 | ## Latest version tags 49 | 50 | In some cases, you're less likely to be worried about a specific version; for example, it may not matter which version 51 | of memcached you use. 52 | 53 | When you don't need to call for a specific version of a Service, using the image name without a tag 54 | (`tugboatqa/memcached`), or the `latest` tag (`tugboatqa/memcached:latest`) will get you the most recent version of a 55 | Service image. 56 | -------------------------------------------------------------------------------- /content/setting-up-services/service-images/mirror-production-with-image.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Using a Docker Image to Mirror Your Production Services" 3 | date: 2019-09-19T13:22:09-04:00 4 | weight: 3 5 | --- 6 | 7 | Using a Docker image to mirror your production services in Tugboat works the same as pulling an image for any other 8 | Service in Tugboat. Follow the [steps to set up Services in Tugboat](/setting-up-services/how-to-set-up-services/), and 9 | specify your production image. 10 | 11 | As you'll probably be pulling from a private repository, you may need to first: 12 | 13 | 1. [Authenticate with a Docker Registry](/setting-up-tugboat/select-repo-settings/#authenticate-with-a-docker-registry) 14 | from Tugboat's [Repository Settings](/setting-up-tugboat/select-repo-settings/#change-repository-settings). 15 | 2. Take a look at [using third-party Docker images with Tugboat](../third-party-docker-images/) for info about caveats, 16 | as well as links to scripts you could use to optimize your own image for Tugboat. 17 | 3. If you're pulling from a private Docker repository that isn't on Docker Hub, you'll need to follow the process in: 18 | [Bring your own Docker image from another registry](/setting-up-services/how-to-set-up-services/specify-a-service-image/#how-to-use-a-docker-image-from-another-registry). 19 | -------------------------------------------------------------------------------- /content/setting-up-services/service-images/third-party-docker-images.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Third Party Docker Images" 3 | date: 2019-09-19T13:22:21-04:00 4 | weight: 4 5 | --- 6 | 7 | Theoretically, you can use any publicly available Docker image in your Tugboat build. However, you may run into a 8 | limitation that can make third-party Docker images problematic: Tugboat will not create a Service from an image that 9 | defines any VOLUMES. For that reason, we recommend sticking with the images built specifically for use with Tugboat. 10 | 11 | If you'd like to use your own Docker images, this repo contains the scripts we use to make an image Tugboat compatible: 12 | 13 | 14 | {{% notice info %}} Under the hood, Tugboat commits the entire state of the container (including files, databases, etc) 15 | to optimize Preview builds when it takes 16 | [the Build Snapshot](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-snapshot). With a Build snapshot 17 | in place, a Preview built from a Base Preview only runs the `build` steps - without importing a database or other 18 | required assets. (For more info, take a look at: 19 | [the build process: explained.](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-process-explained)) 20 | Because of this, the concept of Docker volumes doesn’t really mesh with the way Tugboat uses images. {{% /notice %}} 21 | -------------------------------------------------------------------------------- /content/setting-up-services/service-images/using-tugboat-images.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Using Tugboat's Prebuilt Docker Images" 3 | date: 2019-09-19T13:21:53-04:00 4 | weight: 2 5 | --- 6 | 7 | Tugboat maintains several [prebuilt Docker images](/reference/tugboat-images/). These images are extensions of 8 | [official Docker images](https://docs.docker.com/docker-hub/official_repos/) that include tools and configurations that 9 | help them work well with Tugboat. Tugboat's images track the upstream images, meaning the `tugboatqa/httpd:2.4` image 10 | extends the latest official `httpd:2.4` image. 11 | 12 | For a complete list of Tugboat's images and tags, find us on [Docker Hub](https://hub.docker.com/u/tugboatqa/). 13 | 14 | You can check out the scripts we used to create these images on [GitHub](https://github.com/TugboatQA/images). 15 | 16 | {{% notice note %}} We add new [prebuilt service images](/reference/tugboat-images/) as users need them. If there is 17 | something you need that we have not yet added, [let us know](/support/), and we will work with you to try to get it 18 | added to the list. Alternatively, you are free to choose a generic service image, such as `debian`, or `ubuntu`, and 19 | install any packages you might need. {{% /notice %}} 20 | -------------------------------------------------------------------------------- /content/setting-up-tugboat/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Setting Up Tugboat" 3 | date: 2019-09-17T09:34:20-04:00 4 | weight: 1 5 | chapter: true 6 | pre: "1. " 7 | --- 8 | 9 | Connecting Tugboat to your git provider, creating projects, adding repositories. 10 | 11 | {{%children%}} 12 | 13 | {{% notice tip %}} If you want to learn more about setting up Tugboat and get a feel for the overall workflow, watch our 14 | [Getting Started with Tugboat video](https://www.youtube.com/watch?v=HYTsrm5ORmU) on YouTube. {{% /notice %}} 15 | -------------------------------------------------------------------------------- /content/setting-up-tugboat/add-repos-to-the-project.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Add Repos to the Project" 3 | date: 2019-09-17T11:42:01-04:00 4 | weight: 3 5 | --- 6 | 7 | Once you've decided how you want to structure your project, add the relevant repos to your project. 8 | 9 | ### To add repos during project creation: 10 | 11 | When you're creating a project, select your repository host from the Provider drop-down, select the Organization, if 12 | applicable, and click the radio button next to the repo you want to add. 13 | 14 | ![Select Provider and repo](../../_images/add-repos-to-project-select-repo.png) 15 | 16 | Alternately, if you're using a generic git server, select Git as the provider, and enter your Git URL. 17 | 18 | ![Specify generic git server](../../_images/add-repos-to-project-generic-git-provider.png) 19 | 20 | ### To add repos to a project you've already created: 21 | 22 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 23 | 2. Select the project where you want to add the repo. 24 | 3. Go to {{% ui-text %}}Add a Repository{{% /ui-text %}} . 25 | 26 | From there, you'll be back to the 'select a provider and specify a repo' screen. 27 | 28 | {{% notice info %}} There is no limit to the number of repositories you can add to a Tugboat project. However, you may 29 | be unable to build new Previews within a project, if the total storage used in your project reaches the 30 | [billing tier storage limit for your project](/tugboat-billing/tugboat-pricing/#how-does-tugboat-pricing-work). 31 | {{% /notice %}} 32 | 33 | {{%expand "Visual Walkthrough" %}} 34 | 35 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat screen. 36 | 37 | ![My Projects](../../_images/go-to-user-my-projects.png) 38 | 39 | Select the project where you want to add the repo. 40 | 41 | ![Select the project](../../_images/select-a-project.png) 42 | 43 | Go to {{% ui-text %}}Add a Repository{{% /ui-text %}} . 44 | 45 | ![Go to Add a Repository](../../_images/go-to-add-a-repository.png) 46 | 47 | From there, you'll be back to the 'select a provider and specify a repo' screen. 48 | 49 | {{% /expand%}} 50 | -------------------------------------------------------------------------------- /content/setting-up-tugboat/create-a-new-project.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create a New Project" 3 | date: 2019-09-17T11:41:50-04:00 4 | weight: 2 5 | --- 6 | 7 | Once you've connected Tugboat to your preferred git provider, it's time to create a new project! 8 | 9 | - [How to create a project](#how-to-create-a-project) 10 | - [Things to know about Tugboat projects](#things-to-know-about-tugboat-projects) 11 | 12 | Once you hit the {{% ui-text %}}Create Project{{% /ui-text %}} button, it's anchors away! 13 | 14 | ## How to create a project 15 | 16 | The first time you sign into Tugboat, you'll go directly to the Create New Project screen. 17 | 18 | After you've already got a project, you can add more by going to the Tugboat Dashboard and selecting 19 | {{% ui-text %}}Create New Project{{% /ui-text %}}. 20 | 21 | ![Select the Create New Project link](../../_images/create-a-new-project.png) 22 | 23 | ## Things to know about Tugboat projects 24 | 25 | When you're creating a project, there are a few things to keep in mind: 26 | 27 | - A Tugboat project is a collection of any number of repos across git providers 28 | - Tugboat's pricing tiers and billing are specified on the project level, not based on the number of repositories 29 | - Users are managed on a per project basis 30 | 31 | Deciding which users need to be able to access which projects can help you figure out how you want to organize, too. For 32 | example, let's say you are building a recipe site that consists of a backend Drupal repository and a frontend React 33 | repository. If the entire development team should have access to both repositories within Tugboat, you should probably 34 | create a single project for both repositories in Tugboat. 35 | 36 | On the other hand, let's say you have a WordPress blog that is managed by an outside vendor. Also, you have a separate 37 | and unrelated Node.js application that is a "top secret" internal project your company is working on. It may be best to 38 | create two separate projects so that you can manage permissions for each of the projects independently. 39 | -------------------------------------------------------------------------------- /content/setting-up-tugboat/create-a-tugboat-config-file.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create a Tugboat Config File" 3 | date: 2019-09-17T11:42:29-04:00 4 | weight: 5 5 | --- 6 | 7 | The final step in setting up your Tugboat is creating a Tugboat config. This config is Tugboat's infrastructure-as-code 8 | implementation for specifying the instructions required to build working Previews of your website. There are two ways to 9 | pass config information to Tugboat: 10 | 11 | - Commit a Tugboat config.yml file to a linked git repository 12 | - Pass a Tugboat config JSON object to the API as a parameter on Preview creation 13 | 14 | ## Committing a Tugboat config.yml file 15 | 16 | The traditional way to create a Tugboat config is to commit a YAML Config file in the linked git repository. 17 | 18 | The Tugboat Config file should live at `.tugboat/config.yml` in the branch, tag, commit or pull request that is being 19 | built. 20 | 21 | ## Passing a Tugboat config as a parameter 22 | 23 | You can pass a Tugboat config file as a parameter in two ways: 24 | 25 | - [Tugboat CLI config file argument](#tugboat-cli-config-file-argument) 26 | - [Tugboat API config file parameter](#tugboat-api-config-file-parameter) 27 | 28 | ### Tugboat CLI config file argument 29 | 30 | When you're making changes to your config file, you can iterate quickly by passing the config file with the Tugboat CLI. 31 | When you `create` a Preview through the CLI, you can pass your config file as an argument, using this syntax: 32 | 33 | `tugboat create preview main repo=[repoid] config=./config.yml` 34 | 35 | Once you've iterated your way to a `config.yml` that functions as desired, you can commit the file to the repository to 36 | power your Preview builds. 37 | 38 | ### Tugboat API config file parameter 39 | 40 | If you're using the [Tugboat API](https://api.tugboatqa.com/) to build Previews, you can pass the config information as 41 | a JSON object when building Previews using the API. This option is available 42 | [on POST when creating Previews](https://api.tugboatqa.com/v3#tag/Previews/paths/~1previews/post). 43 | 44 | ## What's in the config.yml file? 45 | 46 | The config file defines the Services that your Tugboat Preview will set up during the build process, as well as any 47 | Service commands you'll use to provide instructions at specific points in the build process. 48 | 49 | Start with these docs to begin creating a `config.yml` for your Previews: 50 | 51 | - [Setting up Services in your Tugboat](/setting-up-services/) 52 | - [Starter Configuration files](/starter-configs/) (configuration file code snippets with comments to help you get 53 | started) 54 | 55 | You may also find these docs helpful if you want to do things like use the Tugboat CLI to build Previews, shell into 56 | services, or debug your Tugboat config: 57 | 58 | - [Using the Tugboat Command Line Tool](/tugboat-cli/) 59 | - [Tugboat Configuration Reference](/reference/tugboat-configuration/) (detailing the attributes you can use when 60 | building Previews with Tugboat) 61 | - [Debugging Config files](/troubleshooting/debug-config-file/) 62 | -------------------------------------------------------------------------------- /content/starter-configs/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Starter Configs" 3 | date = 2019-09-19T10:58:04-04:00 4 | weight = 5 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | In addition to these code snippets and tutorials, we also maintain repositories with 10 | [starter configuration files](https://github.com/search?q=topic%3Atugboat-starter-kit&type=Repositories) for other 11 | frameworks and Content Management Systems in our [GitHub account](https://github.com/TugboatQA). 12 | 13 | See our blog post: 14 | [10 Tips for Writing Your Tugboat YAML Config](https://www.tugboatqa.com/2021/02/02/Ten-Tips-For-Writing-Your-Tugboat-YAML-Config.html). 15 | 16 | {{%children depth="4"%}} 17 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Code Snippets" 3 | date = 2019-09-19T11:09:26-04:00 4 | lastmod = 2020-06-02T09:00:00-04:00 5 | weight = 3 6 | chapter = true 7 | pre = "" 8 | +++ 9 | 10 | Example config.yml code stubs to use when adding functionality to your projects. 11 | 12 | {{%children%}} 13 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/import-mysql-database.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Import a MySQL Database" 3 | date: 2019-09-19T10:59:51-04:00 4 | weight: 1 5 | --- 6 | 7 | This example assumes that there is a mysqldump file available somewhere via SSH. 8 | 9 | First, import the Tugboat Repository's [SSH key](/setting-up-tugboat/select-repo-settings/#set-up-remote-ssh-access) to 10 | the server hosting the file. 11 | 12 | Then, use this snippet in your [configuration file](/setting-up-tugboat/create-a-tugboat-config-file/) to import the 13 | database into a [service](/setting-up-services/) named "mysql". 14 | 15 | ```yaml 16 | services: 17 | mysql: 18 | image: tugboatqa/mysql:5-debian 19 | commands: 20 | init: 21 | - scp example.com/database.sql.gz /tmp/ 22 | - zcat /tmp/database.sql.gz | mysql tugboat 23 | - rm /tmp/database.sql.gz 24 | ``` 25 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/install-nodejs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Install Node.js" 3 | date: 2023-09-11T17:04:07-04:00 4 | weight: 1 5 | --- 6 | 7 | If you need a specific version of Node.js on an image other than the `tugboatqa/node` image, we recommend using 8 | [NodeSource distributions](https://github.com/nodesource/distributions) to do so. The majority of Tugboat images are 9 | Debian-based. 10 | 11 | For example, to install Node.js version 18.x on a PHP service: 12 | 13 | ```yaml 14 | services: 15 | php: 16 | image: tugboatqa/php:8 17 | commands: 18 | init: 19 | - apt-get update 20 | - apt-get install -yq ca-certificates curl gnupg 21 | - mkdir -p /etc/apt/keyrings 22 | - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o 23 | /etc/apt/keyrings/nodesource.gpg 24 | - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | 25 | tee /etc/apt/sources.list.d/nodesource.list 26 | - apt-get update 27 | - apt-get install -yq nodejs 28 | ``` 29 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/memcache.md: -------------------------------------------------------------------------------- 1 | # Adding Memcached to Drupal Previews 2 | 3 | If your Drupal site uses memcached in production, you may also want to add a memcached service to your Tugboat Previews. 4 | 5 | In your Tugboat config.yml. Install the memcached library and pecl driver. Also add a memcached service. 6 | 7 | ```yaml 8 | services: 9 | php: 10 | image: tugboatqa/php:8.3-apache 11 | commands: 12 | init: 13 | - apt-get update 14 | - apt-get install libzip-dev libmemcached-dev zlib1g-dev libssl-dev 15 | - echo yes '' | pecl install -f memcached-3.2.0 16 | - docker-php-ext-enable opcache zip memcached 17 | 18 | # Add a memcached container 19 | memcached: 20 | image: tugboatqa/memcached:latest 21 | ``` 22 | 23 | In your Tugboat Drupal `settings.php` add the reference to the memcache container with default options. 24 | 25 | ```php 26 | // Memcache on Tugboat 27 | $settings['memcache']['servers'] = ['memcached:11211' => 'default']; 28 | $settings['memcache']['bins'] = ['default' => 'default']; 29 | $settings['memcache']['key_prefix'] = ''; 30 | $settings['cache']['default'] = 'cache.backend.memcache'; 31 | ``` 32 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/page-cache.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Warm a Page Cache Within Tugboat" 3 | date: 2019-09-19T11:00:02-04:00 4 | weight: 1 5 | --- 6 | 7 | If your web application has a page caching layer, you can prime the cache from within the 8 | [Tugboat config file](/setting-up-tugboat/create-a-tugboat-config-file/). This code snippet should get you started: 9 | 10 | ```yaml 11 | services: 12 | php: 13 | commands: 14 | build: 15 | # Warm the cache 16 | - 'wget -e robots=off --quiet --page-requisites --delete-after --header "Host: tugboatqa.com" http://localhost 17 | || /bin/true' 18 | ``` 19 | 20 | Calling `localhost` will cause Tugboat to load the front page of your application. `page-requisites` loads all images, 21 | and `delete-after` removes the downloaded assets to preserve disk space. 22 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/phpmyadmin.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Add a phpMyAdmin service" 3 | date: 2019-09-19T11:00:19-04:00 4 | weight: 1 5 | --- 6 | 7 | Database management tools such as MySQL Workbench or Sequel Pro are commonly used by developers to work with a MySQL 8 | database. However, Tugboat does not provide a way for these tools to connect to a database in a Preview. A popular 9 | alternative is to use [phpMyAdmin](https://www.phpmyadmin.net/) to fill this gap. 10 | 11 | {{% notice warning %}} Exposing a phpMyAdmin service grants full access to the database for the Tugboat Preview to 12 | anyone who has the link. While it is best practice to avoid storing sensitive data in Tugboat, it is still a good idea 13 | to be careful about sharing this link. {{% /notice %}} 14 | 15 | You can use the official phpMyAdmin [Docker image](https://hub.docker.com/r/phpmyadmin/phpmyadmin) can with Tugboat. 16 | Here is an example [config file](/setting-up-tugboat/create-a-tugboat-config-file/) showing how you might add a 17 | phpmyadmin service to a Tugboat Preview: 18 | 19 | ```yaml 20 | services: 21 | mysql: 22 | image: tugboatqa/mysql:5-debian 23 | phpmyadmin: 24 | expose: 80 25 | image: phpmyadmin/phpmyadmin 26 | ``` 27 | 28 | {{% notice tip %}} MySQL 8 uses a new authentication method, which does not work with the PHP mysqli extension that 29 | phpMyAdmin uses. To work around this, alter the "tugboat" MySQL user with an init command for the `mysql` service. Your 30 | config.yml might look like this: {{% /notice %}} 31 | 32 | ```yaml 33 | mysql: 34 | image: tugboatqa/mysql:8-debian 35 | commands: 36 | init: mysql -e "ALTER USER 'tugboat'@'%' IDENTIFIED WITH mysql_native_password BY 'tugboat';" 37 | ``` 38 | 39 | Once you've added the phpmyadmin service to your Tugboat config, you will need to follow the instructions on the 40 | [Custom Environment Variables](/setting-up-services/how-to-set-up-services/custom-environment-variables/) to add the 41 | following environment variables to your Repository Settings: 42 | 43 | - **`PMA_HOST`** - Set this to the name of the MySQL service that you would like phpmyadmin to connect to. In the 44 | example yml config above, the service name is `mysql` 45 | 46 | - **`PMA_USER`** - Set this environment variable to a MySQL user that can connect to the above MySQL service. Typically 47 | this is the default `tugboat` user 48 | 49 | - **`PMA_PASSWORD`** - This is the password for the above MySQL user. The default password for the `tugboat` user is 50 | also `tugboat` 51 | 52 | Once you've added these environment variables, you're ready to build a new Preview with phpMyAdmin. Note that we are 53 | exposing port 80 in the config.yml above, which will give you a separate {{% ui-text %}}Preview{{% /ui-text %}} button 54 | on the Tugboat Preview Dashboard for phpMyAdmin: 55 | 56 | ![Click Preview to access phpMyAdmin](/_images/phpmyadmin-preview.png) 57 | -------------------------------------------------------------------------------- /content/starter-configs/code-snippets/terminal-aliases.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Terminal Aliases and Programs" 3 | date: 2023-07-17T17:00:00-04:00 4 | weight: 1 5 | --- 6 | 7 | If you use the Terminal utility in Tugboat's previews, then it might be helpful to customize it, such as adding aliases 8 | and linking programs into the \$PATH. Here's how you can do that from your `config.yml` file. 9 | 10 | ```yaml 11 | php: 12 | image: tugboatqa/php:8 13 | commands: 14 | init: 15 | # Create the standard long-list "ll" alias. 16 | - echo "alias ll='ls -la'" >> /root/.bashrc 17 | 18 | # If using composer, add the path to our "/vendor/bin" directory to the $PATH so we can call those programs 19 | # without typing out the full path. 20 | - echo "export PATH=$PATH:${TUGBOAT_ROOT}/vendor/bin" >> /root/.bashrc 21 | ``` 22 | 23 | _Note: This snippet will make your aliases and programs available within the terminal utility from the UI only. They 24 | will not be available within the `config.yml` file itself._ 25 | 26 | ![code-snippets--bash-aliases--terminal.png](/_images/code-snippets--bash-aliases--terminal.png) 27 | -------------------------------------------------------------------------------- /content/starter-configs/examples/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Examples" 3 | date = 2020-06-02T09:00:00-04:00 4 | weight = 1 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Example config.yml files to get you started with common frameworks or configurations. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/starter-configs/examples/gatsby.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Gatsby Static Site" 3 | date: 2023-06-23T15:29:39-06:00 4 | weight: 1 5 | --- 6 | 7 | Deploy your static Gatsby site with Tugboat. 8 | 9 | ## Configure Tugboat for Gatsby 10 | 11 | The Tugboat configuration is managed by a [YAML file](/setting-up-tugboat/create-a-tugboat-config-file/) at 12 | `.tugboat/config.yml` in the git repository. Here's a basic static HTML configuration you can use as a starting point, 13 | with comments to explain what's going on: 14 | 15 | ```yaml 16 | services: 17 | # Configure a standard apache webserver to host our site. 18 | apache: 19 | # Use the most recent version of httpd service. 20 | image: tugboatqa/httpd:latest 21 | 22 | # Run these commands to initialize the server, update it with any libraries and assets required, then build your site. 23 | commands: 24 | # Initialize the server. 25 | init: 26 | # Install node.js version 18. 27 | - apt-get update 28 | - apt-get install -yq ca-certificates curl gnupg 29 | - mkdir -p /etc/apt/keyrings 30 | - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o 31 | /etc/apt/keyrings/nodesource.gpg 32 | - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | 33 | tee /etc/apt/sources.list.d/nodesource.list 34 | - apt-get update 35 | - apt-get install -yq nodejs 36 | 37 | # Set the webroot for to the Gatsby public folder. 38 | # Change this if you specify a different root for your public site. 39 | - ln -snf "${TUGBOAT_ROOT}/public" "${DOCROOT}" 40 | 41 | # Load dependent libraries and assets to prepare the site for build. 42 | update: 43 | # Run the node.js installer to install Gatsby and its dependencies. 44 | - npm install 45 | 46 | # Run any commands needed to build the site. 47 | build: 48 | # Build the static Gatsby site. 49 | - npm run build 50 | ``` 51 | 52 | Want to know more about something mentioned in the comments of this config file? Check out these topics: 53 | 54 | - [Name your Service](/setting-up-services/how-to-set-up-services/name-your-service/) 55 | - [Specify a Service image](/setting-up-services/how-to-set-up-services/specify-a-service-image/) 56 | - [Leverage Service commands](/setting-up-services/how-to-set-up-services/leverage-service-commands/) 57 | - [Define a default Service](/setting-up-services/how-to-set-up-services/define-a-default-service/) 58 | - [Set the document root path](/setting-up-services/how-to-set-up-services/set-the-document-root-path/) 59 | - [Preview build process phases (`init`, `update`, `build`)](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-process-explained) 60 | 61 | ## Start Building Previews! 62 | 63 | Once this Tugboat configuration file is committed to your git repository, you can start 64 | [building previews](/building-a-preview/administer-previews/build-previews/)! 65 | -------------------------------------------------------------------------------- /content/starter-configs/examples/static-html.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Static HTML" 3 | date: 2019-09-19T11:00:39-04:00 4 | weight: 1 5 | --- 6 | 7 | A static HTML Tugboat Preview serves files exactly as they are found in the git repository. 8 | 9 | ## Configure Tugboat 10 | 11 | The Tugboat configuration is managed by a [YAML file](/setting-up-tugboat/create-a-tugboat-config-file/) at 12 | `.tugboat/config.yml` in the git repository. Here's a basic static HTML configuration you can use as a starting point, 13 | with comments to explain what's going on: 14 | 15 | ```yaml 16 | services: 17 | # What to call the service hosting the site. Because there is only 18 | # one service, it is automatically set as the default service, which 19 | # does a few things 20 | # 1. Clones the git repository into the service container 21 | # 2. Exposes port 80 to the Tugboat HTTP proxy 22 | # 3. Routes requests to the preview URL to this service 23 | apache: 24 | # Use the available version of Apache by not specifying a version 25 | image: tugboatqa/httpd 26 | 27 | # A set of commands to run while building this service 28 | commands: 29 | # Commands that set up the basic preview infrastructure 30 | init: 31 | # Link the document root to the expected path. This example links the 32 | # root of the git repository to the docroot 33 | - ln -snf "${TUGBOAT_ROOT}" "${DOCROOT}" 34 | ``` 35 | 36 | Want to know more about something mentioned in the comments of this config file? Check out these topics: 37 | 38 | - [Name your Service](/setting-up-services/how-to-set-up-services/name-your-service/) 39 | - [Specify a Service image](/setting-up-services/how-to-set-up-services/specify-a-service-image/) 40 | - [Leverage Service commands](/setting-up-services/how-to-set-up-services/leverage-service-commands/) 41 | - [Define a default Service](/setting-up-services/how-to-set-up-services/define-a-default-service/) 42 | - [Set the document root path](/setting-up-services/how-to-set-up-services/set-the-document-root-path/) 43 | - [Preview build process phases (`init`, `update`, `build`)](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-process-explained) 44 | 45 | ## Start Building Previews! 46 | 47 | Once this Tugboat configuration file is committed to your git repository, you can start 48 | [building previews](/building-a-preview/administer-previews/build-previews/)! 49 | -------------------------------------------------------------------------------- /content/starter-configs/examples/static-hugo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Hugo Static Site" 3 | date: 2019-09-19T11:00:39-04:00 4 | weight: 2 5 | --- 6 | 7 | A Tugboat Preview for a [Hugo static site](https://gohugo.io/) builds the static site, and then serves it. This config 8 | generates a static site that looks like your `hugo` build on your local development environment, but is accessible via 9 | the secure Tugboat URL by anyone who has the link; no need for the viewer to have a local environment. 10 | 11 | ## Configure Tugboat 12 | 13 | The Tugboat configuration is managed by a [YAML file](/setting-up-tugboat/create-a-tugboat-config-file/) at 14 | `.tugboat/config.yml` in the git repository. Here's a basic Hugo static site configuration you can use as a starting 15 | point, with comments to explain what's going on: 16 | 17 | ```yaml 18 | services: 19 | # What to call the service hosting the site. Because there is only 20 | # one service, it is automatically set as the default service, which 21 | # does a few things 22 | # 1. Clones the git repository into the service container 23 | # 2. Exposes port 80 to the Tugboat HTTP proxy 24 | # 3. Routes requests to the preview URL to this service 25 | apache: 26 | # Use the available version of Apache by not specifying a version 27 | image: tugboatqa/httpd 28 | 29 | # A set of commands to run while building this service 30 | commands: 31 | # Commands that set up the basic preview infrastructure 32 | init: 33 | # Use curl to download Hugo into the Apache service 34 | - curl -Ls https://github.com/gohugoio/hugo/releases/download/v0.58.3/hugo_0.58.3_Linux-64bit.tar.gz | tar -C 35 | /usr/local/bin -zxf - hugo 36 | 37 | build: 38 | # Hugo's command to build your static site 39 | - hugo 40 | 41 | # Link the document root to the expected path. This example links the 42 | # /public directory generated by the Hugo build to the docroot 43 | - ln -snf "${TUGBOAT_ROOT}/public" "${DOCROOT}" 44 | ``` 45 | 46 | Want to know more about something mentioned in the comments of this config file? Check out these topics: 47 | 48 | - [Name your Service](/setting-up-services/how-to-set-up-services/name-your-service/) 49 | - [Specify a Service image](/setting-up-services/how-to-set-up-services/specify-a-service-image/) 50 | - [Leverage Service commands](/setting-up-services/how-to-set-up-services/leverage-service-commands/) 51 | - [Define a default Service](/setting-up-services/how-to-set-up-services/define-a-default-service/) 52 | - [Set the document root path](/setting-up-services/how-to-set-up-services/set-the-document-root-path/) 53 | - [Preview build process phases (`init`, `update`, `build`)](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-process-explained) 54 | 55 | ## Start Building Previews! 56 | 57 | Once this Tugboat configuration file is committed to your git repository, you can start 58 | [building previews](/building-a-preview/administer-previews/build-previews/)! 59 | -------------------------------------------------------------------------------- /content/starter-configs/examples/static-jekyll.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll Static Site" 3 | date: 2020-05-29T12:00:00-04:00 4 | weight: 3 5 | --- 6 | 7 | A Tugboat Preview for a [Jekyll static site](https://jekyllrb.com/) builds the static site, and then serves it. This 8 | config generates a static site that looks like your `jekyll build` on your local development environment, but is 9 | accessible via the secure Tugboat URL by anyone who has the link; no need for the viewer to have a local environment. 10 | 11 | ## Configure Tugboat 12 | 13 | The Tugboat configuration is managed by a [YAML file](/setting-up-tugboat/create-a-tugboat-config-file/) at 14 | `.tugboat/config.yml` in the git repository. Here's a basic Jekyll static site configuration you can use as a starting 15 | point, with comments to explain what's going on: 16 | 17 | ```yaml 18 | services: 19 | # What to call the service hosting the site. Because there is only 20 | # one service, it is automatically set as the default service, which 21 | # does a few things 22 | # 1. Clones the git repository into the service container 23 | # 2. Exposes port 80 to the Tugboat HTTP proxy 24 | # 3. Routes requests to the preview URL to this service 25 | apache: 26 | # Use the available version of Apache by not specifying a version 27 | image: tugboatqa/httpd 28 | 29 | # A set of commands to run while building this service 30 | commands: 31 | # Commands that set up the basic preview infrastructure 32 | init: 33 | # Check for updates to apt-get, and then use it to install Ruby 34 | - apt-get update 35 | - apt-get install ruby ruby-dev 36 | 37 | # Install Jekyll 38 | - gem install jekyll bundler 39 | 40 | # Clean up apt artifacts to keep the Preview small 41 | - apt-get clean 42 | - rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 43 | 44 | build: 45 | # Check for updates to Jekyll 46 | - bundle update 47 | 48 | # Use the `jekyll build` command to build your static site 49 | - bundle exec jekyll build 50 | 51 | # Link the document root to the expected path. This example links the 52 | # /public directory generated by the Jekyll build to the docroot 53 | - ln -snf "${TUGBOAT_ROOT}"/_site "${DOCROOT}" 54 | ``` 55 | 56 | Want to know more about something mentioned in the comments of this config file? Check out these topics: 57 | 58 | - [Name your Service](/setting-up-services/how-to-set-up-services/name-your-service/) 59 | - [Specify a Service image](/setting-up-services/how-to-set-up-services/specify-a-service-image/) 60 | - [Leverage Service commands](/setting-up-services/how-to-set-up-services/leverage-service-commands/) 61 | - [Define a default Service](/setting-up-services/how-to-set-up-services/define-a-default-service/) 62 | - [Set the document root path](/setting-up-services/how-to-set-up-services/set-the-document-root-path/) 63 | - [Preview build process phases (`init`, `update`, `build`)](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-process-explained) 64 | 65 | ## Start Building Previews! 66 | 67 | Once this Tugboat configuration file is committed to your git repository, you can start 68 | [building previews](/building-a-preview/administer-previews/build-previews/)! 69 | -------------------------------------------------------------------------------- /content/starter-configs/examples/static-mkdocs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "MkDocs Static Site" 3 | date: 2020-03-12T12:00:00-04:00 4 | weight: 2.5 5 | --- 6 | 7 | A Tugboat Preview for a [MkDocs static site](https://www.mkdocs.org/) builds the static site within the Tugboat 8 | environment, and then serves it. This config generates a static site that looks like your `site` directory when you 9 | `mkdocs build`, which should be the same thing you see in your local development environment when you run 10 | `mkdocs serve`. However, the Tugboat Preview version of your MkDocs site is accessible via the secure Tugboat URL by 11 | anyone who has the link; no need for the viewer to have a local environment. 12 | 13 | ## Configure Tugboat 14 | 15 | The Tugboat configuration is managed by a [YAML file](/setting-up-tugboat/create-a-tugboat-config-file/) at 16 | `.tugboat/config.yml` in the git repository. Here's a basic MkDocs static site configuration you can use as a starting 17 | point, with comments to explain what's going on: 18 | 19 | ```yaml 20 | services: 21 | # What to call the service hosting the site. Because there is only 22 | # one service, it is automatically set as the default service, which 23 | # does a few things 24 | # 1. Clones your mkdocs git repository into the service container 25 | # 2. Exposes port 80 to the Tugboat HTTP proxy 26 | # 3. Routes requests to the preview URL to this service 27 | apache: 28 | # Use the available version of Apache by not specifying a version 29 | image: tugboatqa/httpd 30 | 31 | # A set of commands to run while building this service 32 | commands: 33 | # Commands that set up the basic preview infrastructure 34 | init: 35 | # Use apt-get to download mkdocs into the Apache service 36 | - apt-get update 37 | - apt-get install -y mkdocs 38 | # Clean up apt artifacts to keep the Preview small 39 | - apt-get clean 40 | - rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 41 | 42 | build: 43 | # Use the mkdocs command to build your static site 44 | - mkdocs build 45 | 46 | # Link the document root to the expected path. This example links the 47 | # /site directory generated by the mkdocs build to the docroot 48 | - ln -snf "${TUGBOAT_ROOT}/site" "${DOCROOT}" 49 | ``` 50 | 51 | Want to know more about something mentioned in the comments of this config file? Check out these topics: 52 | 53 | - [Name your Service](/setting-up-services/how-to-set-up-services/name-your-service/) 54 | - [Specify a Service image](/setting-up-services/how-to-set-up-services/specify-a-service-image/) 55 | - [Leverage Service commands](/setting-up-services/how-to-set-up-services/leverage-service-commands/) 56 | - [Define a default Service](/setting-up-services/how-to-set-up-services/define-a-default-service/) 57 | - [Set the document root path](/setting-up-services/how-to-set-up-services/set-the-document-root-path/) 58 | - [Preview build process phases (`init`, `update`, `build`)](/building-a-preview/preview-deep-dive/how-previews-work/#the-build-process-explained) 59 | 60 | ## Start Building Previews! 61 | 62 | Once this Tugboat configuration file is committed to your git repository, you can start 63 | [building previews](/building-a-preview/administer-previews/build-previews/)! 64 | -------------------------------------------------------------------------------- /content/starter-configs/tutorials/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Tutorials" 3 | date = 2019-09-19T11:07:43-04:00 4 | lastmod = 2020-06-02T09:00:00-04:00 5 | weight = 2 6 | chapter = true 7 | pre = "" 8 | +++ 9 | 10 | Information about configuring frameworks to work with Tugboat, and example config.yml files to get you started. 11 | 12 | {{%children%}} 13 | -------------------------------------------------------------------------------- /content/support/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Support" 3 | date = 2019-09-19T10:58:46-04:00 4 | weight = 25 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Getting used to a new tool can sometimes be a little overwhelming. 10 | 11 | Don’t fret—we’re here for you! 12 | 13 | - Join our [Slack support channel](https://launchpass.com/tugboatqa) to connect with Tugboat's developers, and fellow 14 | developers who are using Tugboat. 15 | - Shoot us an email anytime at [support@tugboatqa.com](mailto:support@tugboatqa.com). 16 | -------------------------------------------------------------------------------- /content/third-party-integrations/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Third-Party Integrations" 3 | date = 2019-09-19T10:58:04-04:00 4 | weight = 6 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | The following resources describe how to integrate your Tugboat project with various third-party services. 10 | 11 | {{%children depth="4"%}} 12 | -------------------------------------------------------------------------------- /content/third-party-integrations/diffy-integration.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Diffy Integration" 3 | date: 2020-07-17T17:00:00-04:00 4 | weight: 10 5 | aliases: 6 | - /starter-configs/code-snippets/diffy-integration 7 | --- 8 | 9 | Tugboat does not provide `visualdiffs` for pages behind authentication. If you need to generate visual diffs from pages 10 | that are protected behind a login screen, you can set up [Diffy](https://diffy.website/) for your Tugboat Previews. 11 | Diffy is a third-party visual diffing tool. 12 | 13 | ## Prerequisites 14 | 15 | 1. You'll need to set up the project in Diffy, and get the numeric project ID from Diffy. 16 | 2. You'll need a Diffy API key to communicate with Diffy. 17 | 18 | ## Tugboat Repository Configuration 19 | 20 | Create Tugboat [environment variables](/setting-up-services/how-to-set-up-services/custom-environment-variables/) to 21 | store your `DIFFY_API_KEY` and `DIFFY_PROJECT_ID`: 22 | 23 | ![Example DIFFY_API_KEY and DIFFY_PROJECT_ID as Tugboat environment variables](/_images/diffy-envvars.png) 24 | 25 | ## Tugboat config.yml 26 | 27 | With the envvars configured in your Tugboat repository, use this snippet in your 28 | [configuration file](/setting-up-tugboat/create-a-tugboat-config-file/) to communicate with Diffy via a 29 | [service](/setting-up-services/) that has PHP installed. 30 | 31 | ```yaml 32 | services: 33 | apache: 34 | commands: 35 | init: 36 | # The Diffy CLI tool requires PHP. If the service image does not have PHP 37 | # installed, do it here 38 | #- apt-get update 39 | #- apt-get install php-cli 40 | 41 | # Download the Diffy CLI tool, and authenticate. The latest version can be 42 | # found at https://github.com/DiffyWebsite/diffy-cli/releases 43 | - curl -L https://github.com/DiffyWebsite/diffy-cli/releases/download/0.1.33/diffy.phar -o /usr/local/bin/diffy 44 | - chmod +x /usr/local/bin/diffy 45 | - diffy auth:login ${DIFFY_API_KEY} 46 | 47 | # Clean up after apt-get, if it was used 48 | #- apt-get clean 49 | #- rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 50 | 51 | online: 52 | # If you would like to compare this service with production 53 | - diffy project:compare ${DIFFY_PROJECT_ID} prod custom --env2Url="${TUGBOAT_SERVICE_URL}" 54 | --commit-sha=${TUGBOAT_PREVIEW_SHA} 55 | 56 | # If you would like to compare this service with its base preview 57 | - | 58 | if [[ -n "$TUGBOAT_BASE_PREVIEW_URL" ]]; then 59 | diffy project:compare $DIFFY_PROJECT_ID custom custom \ 60 | --env1Url=$TUGBOAT_BASE_PREVIEW_URL \ 61 | --env2Url=$TUGBOAT_SERVICE_URL \ 62 | --commit-sha=${TUGBOAT_PREVIEW_SHA} 63 | fi 64 | ``` 65 | -------------------------------------------------------------------------------- /content/third-party-integrations/jira.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jira Environment Mapping" 3 | date: 2025-05-13T11:00:00-04:00 4 | weight: 40 5 | --- 6 | 7 | Integrate Tugboat with [Jira](https://www.atlassian.com/software/jira) using the 8 | [GitHub for Jira](https://github.com/atlassian/github-for-jira/blob/main/docs/deployments.md#environment-mapping) plugin 9 | to map your deployment environments. This ensures that deployments from Tugboat (and other environments) are displayed 10 | with the correct labels in Jira, making it easier to track where your code is running. 11 | 12 | ## Prerequisites 13 | 14 | - A GitHub repository with 15 | [environments](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment) 16 | set up (e.g., Dev, Test, Tugboat, Production Host). 17 | - Jira Cloud instance with the [GitHub for Jira](https://github.com/atlassian/github-for-jira) app installed and 18 | connected to your GitHub organization. 19 | 20 | ## Configure Environment Mapping 21 | 22 | By default, Jira may show deployments as "unmapped" unless you configure environment mapping. To fix this: 23 | 24 | 1. **Add a `.jira/config.yml` file to your repository root:** 25 | 26 | ```yaml 27 | deployments: 28 | environmentMapping: 29 | development: 30 | - "Dev" 31 | testing: 32 | - "Tugboat" 33 | staging: 34 | - "Test" 35 | production: 36 | - "Production Host" 37 | ``` 38 | 39 | - Deployments to **Dev** will show as **Development** in Jira. 40 | - Deployments to **Tugboat** will show as **Testing** in Jira. 41 | - Deployments to **Test** will show as **Staging** in Jira. 42 | - Deployments to **Production Host** will show as **Production** in Jira. 43 | 44 | _Tip: Adjust the mapping to fit your workflow. For example, if you consider Tugboat a staging environment, map it 45 | under `staging` instead of `testing`._ 46 | 47 | 2. **Result in Jira** 48 | 49 | Once configured, deployments will appear in Jira under the correct environment labels. For example, a deployment to 50 | Tugboat will show up as "Testing" in Jira. 51 | 52 | ![Example screenshot of deployment mapping in Jira](/_images/jira-env-mapped.png) 53 | 54 | ## References 55 | 56 | - [GitHub for Jira: Environment Mapping Documentation](https://github.com/atlassian/github-for-jira/blob/main/docs/deployments.md#environment-mapping) 57 | - [Original Issue Discussion](https://github.com/TugboatQA/docs/issues/394) 58 | -------------------------------------------------------------------------------- /content/third-party-integrations/slack-integration.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Slack Webhook Integration" 3 | date: 2021-04-29T10:00:00-04:00 4 | weight: 20 5 | aliases: 6 | - /starter-configs/code-snippets/slack-integration 7 | --- 8 | 9 | Incoming Webhooks are a simple way to post messages from Tugboat into [Slack](https://slack.com/). Creating an Incoming 10 | Webhook gives you a unique URL to which you send a JSON payload with the message text and some options. 11 | 12 | ## Prerequisites: Slack and GitHub 13 | 14 | 1. So, you'll need a [GitHub](https://github.com/) repository, a [Slack](https://slack.com/) account and workspace, and 15 | Tugboat account and project. 16 | 2. You'll need to [create a Slack App](https://api.slack.com/messaging/webhooks) from within your Slack account, and 17 | enable _Incoming Webhooks_. 18 | 3. In the Slack app settings, and you should now see a new entry under the _Webhook URLs for Your Workspace section_, 19 | with a Webhook URL. Copy that URL. We'll import it into Tugboat as an environment variable. The URL will look 20 | something like: `https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX` 21 | 22 | ## Tugboat Repository Configuration 23 | 24 | Create a Tugboat [environment variable](/setting-up-services/how-to-set-up-services/custom-environment-variables/) to 25 | store your `SLACK_WEBHOOK_URL`: 26 | 27 | ## Tugboat config.yml 28 | 29 | Use this snippet in your [configuration file](/setting-up-tugboat/create-a-tugboat-config-file/) to communicate with 30 | Slack via the [service](/setting-up-services/) you want to respond from. 31 | 32 | ```yaml 33 | services: 34 | apache: 35 | commands: 36 | online: 37 | # Send a slack notification if we're on a PR build 38 | - | 39 | if [ ! -z "${TUGBOAT_GITHUB_PR}" ]; then 40 | PR_URL="https://github.com/$TUGBOAT_REPO/pull/$TUGBOAT_GITHUB_PR" 41 | DASHBOARD_URL="https://dashboard.tugboatqa.com/$TUGBOAT_PREVIEW_ID" 42 | MESSAGE="*Tugboat URL:* $TUGBOAT_SERVICE_URL\n*PR:* $PR_URL\n*Dashboard:* $DASHBOARD_URL" 43 | curl -X POST --data-urlencode "payload={\"username\": \"Tugboat\", \"text\": \"$MESSAGE\", \":boat:\": \":tugboat_qa:\"}" "$SLACK_WEBHOOK_URL" 44 | fi 45 | ``` 46 | 47 | Voila! You Slack integration will look like this: 48 | 49 | ![Slack Webhook Example](/_images/slack-webhook-example.png) 50 | -------------------------------------------------------------------------------- /content/third-party-integrations/tenon-io.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tenon.io Integration" 3 | date: 2019-09-19T11:00:49-04:00 4 | weight: 30 5 | aliases: 6 | - /starter-configs/tutorials/tenon-io 7 | --- 8 | 9 | [Tenon.io](https://tenon.io) can identify 508 and WCAG 2.0 issues in any environment. 10 | 11 | Before you use this snippet in you own [Tugboat config file](/setting-up-tugboat/create-a-tugboat-config-file/), 12 | register for an account on Tenon.io and add your Tenon API Key to Tugboat as a 13 | [custom environment variable](/setting-up-services/how-to-set-up-services/custom-environment-variables/) called 14 | `TENON_API`. 15 | 16 | ```yaml 17 | services: 18 | php: 19 | image: tugboatqa/php:8.1-apache 20 | 21 | commands: 22 | init: 23 | - apt-get update 24 | - apt-get install -y jq 25 | 26 | online: 27 | # Tenon Integration 28 | - touch results.json 29 | - curl -d "url=${TUGBOAT_SERVICE_URL}&key=${TENON_API}" -H Content-Type:application/x-www-form-urlencoded -H 30 | Cache-Control:no-cache -X POST https://tenon.io/api/ > results.json 31 | - "jq '{Summary: [.resultSummary .tests], title: .resultSet[] .errorTitle, description: .resultSet[] 32 | .errorDescription, snippet: .resultSet[] .errorSnippet, ref: .resultSet[] .ref, resultTitle: .resultSet[] 33 | .resultTitle, xpath: .resultSet[] .xpath}' results.json" 34 | ``` 35 | -------------------------------------------------------------------------------- /content/troubleshooting/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Troubleshooting" 3 | date = 2019-09-19T10:58:16-04:00 4 | weight = 7 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | How to figure out what went wrong, and fixes for common issues. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/tugboat-billing/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Tugboat Billing" 3 | date = 2019-09-19T10:46:54-04:00 4 | weight = 15 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Tugboat pricing, how to change your Tugboat plan and billing information, and how to cancel Tugboat billing. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/tugboat-billing/change-billing-information.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Change Billing Information" 3 | date: 2019-09-19T10:49:50-04:00 4 | weight: 3 5 | --- 6 | 7 | {{% notice tier %}} The following instructions do not apply to subscriptions to 8 | [Tugboat Premium](https://www.tugboatqa.com/pricing). For those subscriptions, please contact your Tugboat account 9 | executive or [Tugboat Support](https://www.tugboatqa.com/support). {{% /notice %}} 10 | 11 | ## To change the billing information for your Tugboat project: 12 | 13 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat 14 | dashboard. 15 | 2. Select the project where you want to change the billing info. 16 | 3. Go to {{% ui-text %}}Project Settings{{% /ui-text %}}. 17 | 4. Scroll down to {{% ui-text %}}Your Plan{{% /ui-text %}}. 18 | 5. Click the {{% ui-text %}}Billing Information{{% /ui-text %}} link. 19 | 20 | From here, you can: 21 | 22 | - Edit the email address associated with billing for the Tugboat project 23 | - Edit the payment method 24 | - View or print invoices 25 | 26 | {{%expand "Visual Walkthrough" %}} 27 | 28 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat dashboard. 29 | 30 | ![Go to username -> My Projects](../../_images/go-to-user-my-projects.png) 31 | 32 | Select the project where you want to change the billing info. 33 | 34 | ![Select the project](../../_images/select-a-project.png) 35 | 36 | Go to {{% ui-text %}}Project Settings{{% /ui-text %}}. 37 | 38 | ![Go to Project Settings](../../_images/click-project-settings-link.png) 39 | 40 | Scroll down to {{% ui-text %}}Your Plan{{% /ui-text %}}. 41 | 42 | ![Scroll down to Your Plan](../../_images/billing-view-your-plan-premium.png) 43 | 44 | Click the {{% ui-text %}}Billing Information{{% /ui-text %}} link. 45 | 46 | ![Change billing information](../../_images/billing-change-billing-information.png) 47 | 48 | From here, you can: 49 | 50 | - Edit the email address associated with billing for the Tugboat project 51 | - Edit the payment method 52 | - View or print invoices 53 | 54 | ![Tugboat's Billing Information options](../../_images/billing-tugboat-billing-info-screen.png) 55 | 56 | {{% /expand%}} 57 | -------------------------------------------------------------------------------- /content/tugboat-billing/change-tugboat-plan.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Change Plan" 3 | date: 2019-09-19T10:49:31-04:00 4 | weight: 2 5 | --- 6 | 7 | {{% notice tier %}} The following instructions do not apply to subscriptions to 8 | [Tugboat Premium](https://www.tugboatqa.com/pricing). For those subscriptions, please contact your Tugboat account 9 | executive or [Tugboat Support](https://www.tugboatqa.com/support). {{% /notice %}} 10 | 11 | ## To change your Tugboat plan: 12 | 13 | 1. Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat 14 | dashboard. 15 | 2. Select the project where you want to change the plan. 16 | 3. Go to {{% ui-text %}}Project Settings{{% /ui-text %}}. 17 | 4. Scroll down to {{% ui-text %}}Your Plan{{% /ui-text %}}. 18 | 5. Click the radio button next to the new plan you want, and hit the {{% ui-text %}}Update Tier{{% /ui-text %}} button. 19 | 20 | You'll get info about your new plan, and if you're setting up a paid plan for the first time, you'll be prompted to 21 | enter your payment information. Fill this out, hit the {{% ui-text %}}Update Tier{{% /ui-text %}} button again, and 22 | you'll be all set to enjoy your new plan. 23 | 24 | You'll get an email confirming your changes, with a link to an online invoice you can download or print as needed. 25 | 26 | {{% notice note %}} If you're using Tugboat's Premium plans, 27 | [reach out to us directly](https://www.tugboatqa.com/contact) to change your plan. {{% /notice %}} 28 | 29 | {{%expand "Visual Walkthrough" %}} 30 | 31 | Go to username -> [My Projects](https://dashboard.tugboatqa.com/projects) at the upper-right of the Tugboat dashboard. 32 | 33 | ![Go to username -> My Projects](../../_images/go-to-user-my-projects.png) 34 | 35 | Select the project where you want to change the plan. 36 | 37 | ![Select the project](../../_images/select-a-project.png) 38 | 39 | Go to {{% ui-text %}}Project Settings{{% /ui-text %}}. 40 | 41 | ![Go to Project Settings](../../_images/click-project-settings-link.png) 42 | 43 | Scroll down to {{% ui-text %}}Your Plan{{% /ui-text %}}. 44 | 45 | ![Scroll down to Your Plan](../../_images/billing-view-tugboat-plan.png) 46 | 47 | Click the radio button next to the new plan you want, and hit the {{% ui-text %}}Update Tier{{% /ui-text %}} button. 48 | 49 | ![Change your Tugboat plan tier](../../_images/billing-change-plan-update-tier.png) 50 | 51 | You'll get info about your new plan, and if you're setting up a paid plan for the first time, you'll be prompted to 52 | enter your payment information. Fill this out, hit the {{% ui-text %}}Update Tier{{% /ui-text %}} button again, and 53 | you'll be all set to enjoy your new plan. 54 | 55 | ![Setting up a paid Tugboat plan](../../_images/billing-setting-up-paid-tugboat-plan.png) 56 | 57 | You'll get an email confirming your changes, with a link to an online invoice you can download or print as needed. 58 | 59 | ![Email confirmation of plan change](../../_images/billing-plan-update-email.png) 60 | 61 | {{% /expand%}} 62 | -------------------------------------------------------------------------------- /content/tugboat-cli/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Tugboat's CLI" 3 | date = 2019-09-19T10:39:29-04:00 4 | weight = 6 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Installing and using Tugboat's CLI. 10 | 11 | {{%children%}} 12 | 13 | The Tugboat [Command Line Tool](https://dashboard.tugboatqa.com/downloads) provides access to your Tugboat account from 14 | your local command line. It allows you to perform all of the operations available through the web interface, as well as 15 | other, more advanced features of Tugboat. 16 | -------------------------------------------------------------------------------- /content/tugboat-cli/install-the-cli.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Install the Cli" 3 | date: 2019-09-19T10:41:37-04:00 4 | weight: 1 5 | --- 6 | 7 | The Tugboat Command Line Tool is available for Windows, MacOS, and Linux. 8 | 9 | - [Windows](#windows) 10 | - [MacOS](#macos) 11 | - [Linux](#linux) 12 | 13 | ## Windows 14 | 15 | There is currently no installer included with the Windows version of the Tugboat Command Line Tool. You'll either need 16 | to execute it from the directory where you downloaded it, or copy it to a directory in the system PATH variable. 17 | 18 | To copy the Tugboat CLI into a directory in the system PATH variable: 19 | 20 | 1. Download the CLI from [https://dashboard.tugboatqa.com/downloads](https://dashboard.tugboatqa.com/downloads). 21 | 2. Create a new folder at `C:\Program Files\Tugboat`, and copy the downloaded `tugboat.exe` to that folder. 22 | 3. Add `C:\Program Files\Tugboat` to your system PATH variable. 23 | 24 | A good article describing how to modify the PATH variable for each version of Windows can be found at 25 | [https://www.computerhope.com/issues/ch000549.htm](https://www.computerhope.com/issues/ch000549.htm) 26 | 27 | ## MacOS 28 | 29 | We recommend [using Homebrew to manage the Tugboat CLI](#homebrew) for MacOS users, but if you don't use brew, you can 30 | [install the CLI manually](#manual-install-on-macos) using the static binary. 31 | 32 | ### Homebrew 33 | 34 | With [Homebrew installed](https://brew.sh/), first enable the Tugboat Homebrew Tap: 35 | 36 | ```sh 37 | brew tap tugboatqa/tugboat 38 | ``` 39 | 40 | #### Install the Tugboat CLI with Homebrew 41 | 42 | Once you're set up to use the Tugboat Homebrew tap, you can install the Tugboat CLI: 43 | 44 | ```sh 45 | brew install tugboat-cli 46 | ``` 47 | 48 | #### Update the Tugboat CLI with Homebrew 49 | 50 | To update the Tugboat CLI to the latest version with Homebrew: 51 | 52 | ```sh 53 | brew upgrade tugboat-cli 54 | ``` 55 | 56 | Happy brewing! 57 | 58 | ### Manual install on MacOS 59 | 60 | 1. Download the CLI from [https://dashboard.tugboatqa.com/downloads](https://dashboard.tugboatqa.com/downloads). 61 | 2. Extract the downloaded `tugboat.tar.gz` file to `/usr/local/bin` 62 | 63 | ```sh 64 | tar -zxf tugboat.tar.gz -C /usr/local/bin/ 65 | ``` 66 | 67 | #### MacOS Catalina 68 | 69 | With Catalina's enhanced security features, the first time you try to execute a CLI command, you'll get a dialog telling 70 | you that the Tugboat CLI can't be opened. Until we're able to release a signed version of the CLI, here's how to work 71 | around this issue: 72 | 73 | 1. Go into the Finder, and locate the `tugboat` file. 74 | 2. Control-click or right-click the file, and then choose the **OPEN** option from the drop-down menu. 75 | 3. Press the **Open** button. 76 | 77 | This saves the Tugboat CLI as an exception to your security settings. From here, you should be able to use it as you 78 | normally would. 79 | 80 | ## Linux 81 | 82 | 1. Download the CLI from [https://dashboard.tugboatqa.com/downloads](https://dashboard.tugboatqa.com/downloads). 83 | 2. Extract the downloaded `tugboat.tar.gz` file to `/usr/local/bin` 84 | 85 | ```sh 86 | sudo tar -zxf tugboat.tar.gz -C /usr/local/bin/ 87 | ``` 88 | -------------------------------------------------------------------------------- /content/tugboat-cli/set-an-access-token.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Set an Access Token" 3 | date: 2019-09-19T10:41:45-04:00 4 | weight: 2 5 | --- 6 | 7 | The first time you attempt to access a Tugboat resource in the Command Line Interface, you'll be asked for an Access 8 | Token. 9 | 10 | To set an Access Token: 11 | 12 | 1. In Tugboat's web interface, go to User Name -> Access Tokens, or 13 | [click this link](https://dashboard.tugboatqa.com/access-tokens). 14 | 2. Click the {{% ui-text %}}Generate New Token option{{% /ui-text %}}. 15 | 3. You'll be asked to give the Access Token a description; for example, "Command Line Tool"; enter a description and 16 | press the {{% ui-text %}}Generate{{% /ui-text %}} button. 17 | 4. Make sure you save your Access Token somewhere safe, such as [1Password](https://1password.com/) or other password 18 | manager. 19 | 5. When you run the CLI, and attempt to access a resource, you'll be asked for an Access Token; paste it in and hit `Y` 20 | to remember it. 21 | 22 | {{% notice tip %}} 1Password users can install 23 | [a shell plugin for the 1Password CLI](https://developer.1password.com/docs/cli/shell-plugins/tugboat) so that your 24 | Tugboat token will be encrypted, stored securely, and accessible from any machine. Thank you to Mark Dorison of 25 | [Chromatic](https://chromatichq.com) for contributing this plugin. {{% /notice %}} 26 | 27 | Now you're all set to use the Tugboat Command Line Interface! 28 | 29 | {{%expand "Visual Walkthrough" %}} 30 | 31 | In Tugboat's web interface, go to User Name -> Access Tokens, or 32 | [click this link](https://dashboard.tugboatqa.com/access-tokens). 33 | 34 | ![Go to Access Tokens page](../../_images/go-to-user-access-tokens.png) 35 | 36 | Click the {{% ui-text %}}Generate New Token{{% /ui-text %}} option. 37 | 38 | ![Click Generate new token](../../_images/generate-new-token.png) 39 | 40 | You'll be asked to give the Access Token a description; for example, "Command Line Tool"; enter a description and press 41 | the {{% ui-text %}}Generate{{% /ui-text %}} button. 42 | 43 | ![Enter token description and press Generate](../../_images/enter-token-description-and-generate.png) 44 | 45 | Make sure you save your Access Token somewhere safe, as you won't be able to see it again! 46 | 47 | ![Copy your new Access Token](../../_images/copy-new-access-token.png) 48 | 49 | When you run the CLI, and attempt to access a resource, you'll be asked for an Access Token; paste it in and hit `Y` to 50 | have the CLI remember it. 51 | 52 | ![Enter the Access Token in the CLI](../../_images/enter-access-token-in-cli.png) 53 | 54 | {{% /expand%}} 55 | -------------------------------------------------------------------------------- /content/visual-diffs/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Visual Diffs" 3 | date = 2019-09-19T10:30:14-04:00 4 | weight = 4 5 | chapter = true 6 | pre = "" 7 | +++ 8 | 9 | Use Tugboat's visual regression tools to visually diff changes to your sites. 10 | 11 | {{%children%}} 12 | -------------------------------------------------------------------------------- /content/visual-diffs/using-visual-diffs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "How Visual Diffs Work" 3 | date: 2019-09-19T10:32:20-04:00 4 | weight: 4 5 | --- 6 | 7 | When a Preview is built from a [Base Preview](/building-a-preview/work-with-base-previews/set-a-base-preview/), Tugboat 8 | can generate Visual Diff images to highlight any changes between the Base Preview and the new Preview. 9 | 10 | ![Visual Diff Example](/_images/visualdiff.png) 11 | 12 | ## How are Visual Diffs calculated? 13 | 14 | Tugboat's Visual Diffs implementation is a pixel-by-pixel comparison of what a Preview page looks like. The percent 15 | calculation displayed next to the diff is a literal calculation of how many pixels have changed in the page from Before 16 | to After. This makes it a great tool for front-end developers to visually see what has changed on the page, and it also 17 | helps Q/A, Product and UX spot new feature implementation - and also regression bugs. 18 | 19 | ![Example Visual Diff with page contents moved down](/_images/visual-diffs-page-contents-moved-down.png) 20 | 21 | As a result of the way Visual Diffs are calculated, though, when you move something at the top of the page that bumps 22 | content down, the whole page may show up as changed. This is because all of the pixels on the pixel-by-pixel calculation 23 | are no longer an exact match; everything has shifted down. It's great for visual regression testing, or spotting the 24 | introduction of new bugs, but may make something like diffing content changes visually less meaningful. 25 | -------------------------------------------------------------------------------- /content/visual-diffs/view-visual-diffs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "View Visual Diffs" 3 | date: 2019-09-26T15:30:03-04:00 4 | lastmod: 2020-12-22T11:30:00-04:00 5 | weight: 2 6 | --- 7 | 8 | To view Visual Diffs, you'll need to go to the Preview Dashboard. 9 | 10 | ## To view Visual Diffs: 11 | 12 | 1. Click into a Preview that has finished building. 13 | 2. Scroll down past the Services and Lighthouse Reports, and you'll see the Visual Diffs pane. 14 | 3. Click into the Visual Diff for Mobile, Tablet or Desktop to see the diff. 15 | 16 | Inside the diff, you'll see a **Before** visualization on the left, an **After** visualization on the right, and a 17 | composite in the middle, which highlights changes to the page. 18 | 19 | You'll also see an option to {{% ui-text %}}Regenerate{{% /ui-text %}} visual diffs; use this if you've updated your 20 | Base Preview, and want to see a new version of the visual diffs for this build. 21 | 22 | {{% notice info %}} While the Preview is building, you'll see: "Unavailable while preview is building" in the Visual 23 | Diffs pane. After the Preview build has completed, it will take some time for visual diffs to generate. If you get an 24 | error message, or don't see what you expect when the visual diffs generate, head over to 25 | [Troubleshooting -> Visual Diffs](/troubleshooting/preview-built-problem/#troubleshooting-visual-diffs) for tips on 26 | figuring out what happened. {{% /notice %}} 27 | 28 | {{%expand "Visual Walkthrough" %}} 29 | 30 | Click into a Preview that has finished building; 31 | 32 | ![Click into Preview Dashboard](/_images/visual-diffs-click-into-preview.png) 33 | 34 | Scroll down past the Services and Lighthouse Reports, and you'll see the Visual Diffs pane; 35 | 36 | ![View Visual Diffs Pane](/_images/visual-diffs-scroll-to-view-visual-diffs.png) 37 | 38 | Click into the Visual Diff for **Mobile**, **Tablet** or **Desktop** to see the diff. 39 | 40 | ![Click into the Visual Diff to see the diff](/_images/visual-diffs-click-into-desktop-to-view-diff.png) 41 | 42 | Inside the diff, you'll see a **Before** visualization on the left, an **After** visualization on the right, and a 43 | composite in the middle, which highlights changes to the page. 44 | 45 | ![Visual Diff Before, After and Difference](/_images/visual-diffs-before-after-example.png) 46 | 47 | You'll also see an option to {{% ui-text %}}Regenerate{{% /ui-text %}} visual diffs; use this if you've updated your 48 | Preview or Base Preview, and want to see a new version of the visual diffs for this build. 49 | 50 | ![Regenerate visual diffs](/_images/visual-diffs-regenerate-single.png) 51 | 52 | {{% /expand%}} 53 | -------------------------------------------------------------------------------- /layouts/404.html: -------------------------------------------------------------------------------- 1 | 2 | {{- .Store.Set "relearnOutputFormat" "html" }} 3 | 4 | 5 | {{- partial "meta.html" . }} 6 | {{- $title := partial "title.gotmpl" (dict "page" . "fullyQualified" true "reverse" true) }} 7 | {{ $title }} 8 | 9 | {{- /* because this file can be called from literally any URL inside your project, we need to base all relative URLs to make them work */}} 10 | 11 | 12 | {{- partialCached "favicon.html" . }} 13 | {{- partial "stylesheet.html" . }} 14 | {{- partial "custom-header.html" . }} 15 | 16 | 17 |
18 |
19 |
20 |
21 |

404

22 |

{{ T "title-404" }}

23 |

24 |

25 |         # Ah, dang. We tried to look up that page but all we found was this Tub Goat.
26 |                                   ___.
27 |                                 //  \\
28 |                                 ((   ''
29 |                                 \\__,
30 |                                 /6 (%)\,
31 |                               (__/:";,;\--____----_
32 |                                 ;; :';,:';`;,';,;';`,`_
33 |                                   ;:,;;';';,;':,';';,-Y\
34 |                                   ;,;,;';';,;':;';'; Z/
35 |                                   / ;,';';,;';,;';;'
36 |                             o8o   / / |';/~~~~~\,oO8/(
37 |                           o8o8O ( K  | |      Oo8OOo8Oo
38 |                           Oo(""o8""""""""""""""""8oo""""""")
39 |                             `\`'                  `'   /'
40 |                               \                       /
41 |                                 \           _         /
42 |                                 `-. .----<(o)_--. .-'
43 |                           --------(_/------(_<_/--\_)-----------
44 |             
45 |

{{ T "Go-to-homepage" }}

46 |
47 |
48 |
49 |
50 | 51 | 52 | -------------------------------------------------------------------------------- /layouts/partials/custom-header.html: -------------------------------------------------------------------------------- 1 | 2 | {{- partial "head-fonts.html" . }} 3 | 4 | 5 | {{- $assetBusting := partialCached "assetbusting.gotmpl" . }} 6 | 7 | {{- $filePath := "css/custom.css" }} 8 | {{- with (resources.Get (printf "/%s" $filePath)) }} 9 | 10 | {{- else }} 11 | {{- if (fileExists (printf "/static/%s" $filePath)) }} 12 | 13 | {{- end }} 14 | {{- end }} 15 | 16 | {{- $filePath := "js/custom.js" }} 17 | {{- with (resources.Get (printf "/%s" $filePath)) }} 18 | 19 | {{- else }} 20 | {{- if (fileExists (printf "/static/%s" $filePath)) }} 21 | 22 | {{- end }} 23 | {{- end }} 24 | 25 | {{ partial "new-google-analytics.html" . }} -------------------------------------------------------------------------------- /layouts/partials/favicon.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /layouts/partials/head-fonts.html: -------------------------------------------------------------------------------- 1 | {{/* Local Poppins fonts for better performance and Safari compatibility */}} 2 | -------------------------------------------------------------------------------- /layouts/partials/menu-footer.html: -------------------------------------------------------------------------------- 1 |

Built with 2 | from Tugboat to you!

3 | -------------------------------------------------------------------------------- /layouts/partials/new-google-analytics.html: -------------------------------------------------------------------------------- 1 | {{- $pc := .Site.Config.Privacy.GoogleAnalytics -}} 2 | {{- if not $pc.Disable -}} 3 | {{ with .Site.Params.googleAnalytics }} 4 | 5 | 6 | 18 | {{ end }} 19 | {{- end -}} 20 | {{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}} 21 | {{- $pc := .Site.Config.Privacy.GoogleAnalytics -}} 22 | {{- if not $pc.RespectDoNotTrack -}} 23 | var doNotTrack = false; 24 | {{- else -}} 25 | var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack); 26 | var doNotTrack = (dnt == "1" || dnt == "yes"); 27 | {{- end -}} 28 | {{- end -}} 29 | -------------------------------------------------------------------------------- /layouts/shortcodes/icon.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /layouts/shortcodes/ui-text.html: -------------------------------------------------------------------------------- 1 | {{ .Inner }} -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/logo.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tugboat-docs", 3 | "author": { 4 | "name": "Lullaot", 5 | "email": "tugboat@lullabot.com" 6 | }, 7 | "license": "SEE LICENSE IN LICENSE", 8 | "scripts": { 9 | "build": "hugo", 10 | "lint": "prettier --list-different \"**/*.md\"", 11 | "lint-fix": "prettier --write \"**/*.md\"", 12 | "test": "blcl -re ./public", 13 | "serve": "hugo serve" 14 | }, 15 | "devDependencies": { 16 | "broken-link-checker-local": "^0.2.0", 17 | "prettier": "^1.19.1" 18 | }, 19 | "prettier": { 20 | "printWidth": 120, 21 | "proseWrap": "always" 22 | }, 23 | "dependencies": { 24 | "js-yaml": "^4.1.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /peek.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | main: 3 | type: static 4 | path: /public 5 | spa: false 6 | -------------------------------------------------------------------------------- /static/favicon/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /static/favicon/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /static/favicon/apple-touch-icon-167x167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/apple-touch-icon-167x167.png -------------------------------------------------------------------------------- /static/favicon/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /static/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /static/favicon/favicon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/favicon-192x192.png -------------------------------------------------------------------------------- /static/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /static/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /static/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/favicon.ico -------------------------------------------------------------------------------- /static/favicon/favicon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/favicon/ms-tile-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/ms-tile-128x128.png -------------------------------------------------------------------------------- /static/favicon/ms-tile-270x270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/ms-tile-270x270.png -------------------------------------------------------------------------------- /static/favicon/ms-tile-558x270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/ms-tile-558x270.png -------------------------------------------------------------------------------- /static/favicon/ms-tile-558x558.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/favicon/ms-tile-558x558.png -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-300.woff -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-300.woff2 -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-500.woff -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-500.woff2 -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-600.woff -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-600.woff2 -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-italic.woff -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-italic.woff2 -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-regular.woff -------------------------------------------------------------------------------- /static/fonts/poppins/poppins-v6-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/fonts/poppins/poppins-v6-latin-regular.woff2 -------------------------------------------------------------------------------- /static/images/logo-tugboat.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TugboatQA/docs/1c1fdca8d40ab8ee5f632897c60c79eb1ece3062/static/images/logo-tugboat.svg -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | --------------------------------------------------------------------------------