Merge pull request #479 from slumbering/doc_action

Doc action
This commit is contained in:
Andrea Luzzardi 2021-05-21 12:37:17 -07:00 committed by GitHub
commit 80f056d74a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 15346 additions and 23 deletions

View File

@ -1,23 +0,0 @@
name: Doc
on:
push:
paths:
- 'doc/**'
jobs:
copy-file:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Pushes docs file
uses: slumbering/copy_file_to_another_repo_action@main
env:
API_TOKEN_GITHUB: ${{ secrets.DAGGERCI_TOKEN }}
with:
source_file: 'doc/'
destination_repo: 'dagger/launch.dagger.io'
destination_folder: 'site/'
user_email: 'noreply@dagger.io'
user_name: 'dagger-bot'

78
.github/workflows/docs.yml vendored Normal file
View File

@ -0,0 +1,78 @@
name: Docs
on:
push:
branches:
- main
tags:
- v*
paths:
- "docs/**"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: "eu-east-1"
steps:
- name: Set Tag Name
id: vars
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
# fetch-depth: '0' enables listing all tags for version selector
- uses: actions/checkout@v2
with:
fetch-depth: "0"
#################################################################
# BUILD SITE
#################################################################
# Install Node
- uses: actions/setup-node@v2
with:
node-version: "14"
- run: yarn --cwd ./tools/gendocs
- name: Build Site
run: yarn --cwd ./tools/gendocs build --prefix-paths
env:
VERSION: ${{steps.vars.outputs.tag}}
#################################################################
# DEPLOY TO S3
#################################################################
# deploy the site in the right foder ( tag or main)
- name: S3 Sync
uses: ItsKarma/aws-cli@v1.70.0
with:
args: s3 sync --delete ./tools/gendocs/public/ s3://docs.dagger.io/${{steps.vars.outputs.tag}}/
# list All Tags in json file for version selector
# upload to /tags.json
- name: Create tags.json
run: echo "[" {\"tag\"':' \"$(git tag -l "v*" | tr '\n' '|' | sed -e 's/|/"}, {\"tag\"':' "/g')main\"} "]" > tags.json
- name: Copy tags.json
uses: ItsKarma/aws-cli@v1.70.0
with:
args: s3 cp ./tags.json s3://docs.dagger.io/
# landing alway on latest tag
# use S3 Rediret objet
# upload to /docs/index.html
- run: touch index.html
- name: Redirect Latest tag on landing
# FIXME
# if: ${{ steps.vars.outputs.tag != 'main' }}
uses: ItsKarma/aws-cli@v1.70.0
with:
# FIXME: `--website-redirect` uses a permanent redirect, therefore if
# we use the latest version it will be in cache forever.
# args: s3 cp --cache-control max-age=0 --website-redirect /docs/${{steps.vars.outputs.tag}}/ ./index.html s3://docs.dagger.io/docs/
args: s3 cp --cache-control max-age=0 --website-redirect /main/ ./index.html s3://docs.dagger.io/

32
docs/sidebar/sidebar.yml Normal file
View File

@ -0,0 +1,32 @@
# Sidebar navigation
- label: 'Install deploy'
link: '/install'
- label: 'Operator'
link: '/operator'
- label: 'Programming'
link: '/programming'
- label: 'VS'
link: '/vs'
- label: 'Getting started'
link: '/getting-started'
- label: Usage
items:
- label: 'Creating docs'
link: '/usage/creating-docs'
- label: 'Navigation'
link: '/usage/navigation'
- label: 'Shadowing'
link: '/usage/shadowing'
- label: More
items:
- label: FAQ
link: /faq
- label: 'Github'
link: https://github.com/dagger/dagger

71
tools/gendocs/.gitignore vendored Normal file
View File

@ -0,0 +1,71 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# dotenv environment variable files
.env*
# gatsby files
.cache/
public
# Mac files
.DS_Store
# Yarn
yarn-error.log
.pnp/
.pnp.js
# Yarn Integrity file
.yarn-integrity
.idea/

21
tools/gendocs/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Rocketseat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

61
tools/gendocs/README.md Normal file
View File

@ -0,0 +1,61 @@
<p align="center">
<img src="https://rocketseat-cdn.s3-sa-east-1.amazonaws.com/theme-docs.svg" alt="A illustration of file that is the @rocketseat/gatsby-theme-docs logo" width="100">
</p>
<h2 align="center">
Gatsby Starter: Rocket Docs
</h2>
<p align="center">
Out of the box Gatsby Starter for creating documentation websites easily and quickly. With support for MDX, code highlight, Analytics, SEO and more 🔥 Using the theme: <a href="https://github.com/Rocketseat/gatsby-themes/tree/main/%40rocketseat/gatsby-theme-docs">@rocketseat/gatsby-theme-docs</a>
</p>
<p align="center">
<img src="https://img.shields.io/badge/PRs-welcome-%238257E6.svg" alt="PRs welcome!" />
<img alt="License" src="https://img.shields.io/badge/license-MIT-%238257E6">
<a href="https://twitter.com/intent/follow?screen_name=rocketseat">
<img src="https://img.shields.io/twitter/follow/rocketseat.svg?label=Follow%20@rocketseat" alt="Follow @rocketseat" />
</a>
</p>
## 🚀 Features
- 📝 MDX for docs;
- 🛣 Yaml-based sidebar navigation;
- 📱 Responsive and mobile friendly;
- 🖥 Code highlighting with [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) and [react-live](https://github.com/FormidableLabs/react-live) support;
- 🥇 SEO (Sitemap, schema.org data, Open Graph and Twitter tags).
- 📈 Google Analytics support;
- 📄 Custom docs schema;
- 🖱 Table of Contents;
- ⚡️ Offline Support & WebApp Manifest;
- and much more 🔥
## ⚡️ Getting started
1. Create the website.
```sh
npx gatsby new rocket-docs https://github.com/rocketseat/gatsby-starter-rocket-docs
```
2. Start developing.
```sh
cd rocket-docs
gatsby develop
```
3. Are you ready for launch?
Your site is now running at `http://localhost:8000`
## 📄 Docs
Looking for docs? Check our live demo and documentation [website](https://rocketdocs.netlify.app).
---
Made with 💜 by Rocketseat :wave: [check our community!](https://discordapp.com/invite/gCRAFhc)

1
tools/gendocs/docs Symbolic link
View File

@ -0,0 +1 @@
../../docs

View File

@ -0,0 +1,28 @@
module.exports = {
pathPrefix: `/${process.env.VERSION}`,
siteMetadata: {
siteTitle: `Dagger Docs`,
defaultTitle: `Dagger Docs`,
siteTitleShort: `Dagger Docs`,
siteDescription: `Dagger Documentation`,
siteUrl: `https://launch.dagger.io`,
siteAuthor: `@dagger`,
siteImage: `/banner.png`,
siteLanguage: `en`,
themeColor: `#1890FF`,
docVersion : `${process.env.VERSION}`,
},
flags: { PRESERVE_WEBPACK_CACHE: true },
plugins: [
{
resolve: `@rocketseat/gatsby-theme-docs`,
options: {
basePath: `/`,
configPath: `docs/sidebar`,
docsPath: `docs`,
repositoryUrl: `https://github.com/dagger/dagger`,
baseDir: `/`,
},
},
],
};

View File

@ -0,0 +1,34 @@
{
"name": "dagger-docs",
"private": true,
"version": "1.0.0",
"description": "dagger dc",
"author": "Dagger",
"license": "MIT",
"starter-name": "dagger-docs-generator",
"dependencies": {
"@rocketseat/gatsby-theme-docs": "^2.3.1",
"gatsby": "^3.0.4",
"gatsby-plugin-canonical-urls": "^3.0.0",
"gatsby-plugin-google-analytics": "^3.0.0",
"gatsby-plugin-manifest": "^3.0.0",
"gatsby-plugin-offline": "^4.0.0",
"gatsby-plugin-remove-trailing-slashes": "^3.0.0",
"gatsby-plugin-sitemap": "^3.0.0",
"prop-types": "^15.7.2",
"react": "^17.0.1",
"react-dom": "^17.0.1"
},
"devDependencies": {},
"keywords": [
"gatsby",
"rocketseat",
"gatsby-starter"
],
"scripts": {
"build": "gatsby build",
"start": "gatsby develop",
"serve": "gatsby serve",
"clean": "gatsby clean"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -0,0 +1,6 @@
import React from 'react';
import logo from '../assets/dagger-logo.jpg'
export default function Logo(props) {
return <img src={logo} alt="Logo" />
}

View File

@ -0,0 +1,19 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FiExternalLink } from 'react-icons/fi';
export default function ExternalLink({ link, label }) {
return (
<a href={link} rel="noopener noreferrer">
{label}
<FiExternalLink
style={{ width: '16px', height: '16px', marginLeft: '10px' }}
/>
</a>
);
}
ExternalLink.propTypes = {
link: PropTypes.string.isRequired,
label: PropTypes.string.isRequired,
};

View File

@ -0,0 +1,17 @@
import React from 'react';
import PropTypes from 'prop-types';
import {Link} from 'gatsby';
export default function InternalLink({ link, label }) {
return (
<Link to={link} activeClassName="active-link">
{label}
</Link>
);
}
InternalLink.propTypes = {
link: PropTypes.string.isRequired,
label: PropTypes.string.isRequired,
};

View File

@ -0,0 +1,28 @@
import React, { useEffect, useState } from "react";
import { Select as SelectStyled } from '../styles';
const Select = () => {
const isBrowser = typeof window !== "undefined"
const [tagsList, setTagsList] = useState([])
const currentLocation = isBrowser ? window.location.pathname.split('/') : []
currentLocation.pop() //remove last trailing slash
useEffect(() => {
async function getTags() {
const fetchTags = await fetch('https://s3-eu-west-1.amazonaws.com/daggerdoc.humans-it.com/tags.json').then(result => result.json());
setTagsList(fetchTags);
}
getTags()
}, [])
return (
<SelectStyled value={currentLocation[currentLocation.length - 1]} onChange={(e) => isBrowser ? window.location.pathname = `/${e.currentTarget.value}/index.html` : null}>
{tagsList.map(t => (
<option>{t.tag}</option>
))}
</SelectStyled>
);
};
export default Select;

View File

@ -0,0 +1,95 @@
import React from 'react';
import PropTypes from 'prop-types';
import { useStaticQuery, graphql, Link } from 'gatsby';
import { useSidebar } from '@rocketseat/gatsby-theme-docs-core';
import {
Container,
LogoContainer,
List,
Heading,
Item,
SubItem,
} from './styles';
import Select from './Select'
import { isExternalUrl } from '../../util/url';
import ExternalLink from './ExternalLink';
import InternalLink from './InternalLink';
import Logo from '../Logos';
function ListWithSubItems({ children, text }) {
return (
<>
<Heading>{text}</Heading>
<SubItem>{children}</SubItem>
</>
);
}
export default function Sidebar({ isMenuOpen }) {
const {
site: {
siteMetadata: { basePath },
},
} = useStaticQuery(graphql`
{
site {
siteMetadata {
basePath
}
}
}
`);
const data = useSidebar();
function renderLink(link, label) {
return isExternalUrl(link) ? (
<ExternalLink link={link} label={label} />
) : (
<InternalLink link={link} label={label} />
);
}
return (
<Container isMenuOpen={isMenuOpen}>
<LogoContainer>
<Link to={basePath} aria-label="Go to home page">
<Logo aria-hidden="true" />
</Link>
</LogoContainer>
<Select />
<nav>
<List>
{data.map(({ node: { label, link, items, id } }) => {
if (Array.isArray(items)) {
const subitems = items.map((item) => (
<Item key={item.link}>{renderLink(item.link, item.label)}</Item>
));
return (
<ListWithSubItems key={id} text={label}>
{subitems}
</ListWithSubItems>
);
}
return <Item key={id}>{renderLink(link, label)}</Item>;
})}
</List>
</nav>
</Container>
);
}
ListWithSubItems.propTypes = {
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.element),
PropTypes.node,
]).isRequired,
text: PropTypes.string.isRequired,
};
Sidebar.propTypes = {
isMenuOpen: PropTypes.bool.isRequired,
};

View File

@ -0,0 +1,139 @@
import styled from '@emotion/styled';
export const Container = styled.aside`
width: 100%;
overflow-y: auto;
display: flex;
justify-content: space-between;
align-items: center;
flex-direction: column;
position: sticky;
top: 0;
padding-top: 36px;
transition: transform 0.5s;
height: calc(100vh - 1px);
nav {
width: 100%;
padding-top: 24px;
align-self: flex-start;
flex: 1;
}
@media (max-width: 780px) {
max-width: 75%;
min-width: auto;
z-index: 1001;
position: fixed;
top: 0;
bottom: 0;
left: 0;
padding-top: 32px;
background: ${({ theme }) => theme.colors.background};
transform: translate3d(
${({ isMenuOpen }) => (isMenuOpen ? '0' : '-100%')},
0,
0
);
}
`;
export const LogoContainer = styled.div`
width: 70%;
a {
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
}
`;
export const List = styled.ul`
list-style: none;
width: 100%;
padding-left: 0;
display: flex;
justify-content: flex-start;
align-items: center;
flex-direction: column;
`;
export const Heading = styled.li`
padding-left: 30px;
width: 100%;
text-transform: uppercase;
font-size: 14px;
font-weight: bold;
margin-top: 20px;
color: ${({ theme }) => theme.colors.title};
letter-spacing: 0.142em;
`;
export const Item = styled.li`
font-size: 15px;
width: 100%;
transition: all 200ms ease-in-out;
padding: 0 20px;
cursor: pointer;
a,
span {
display: block;
font-size: 15px;
color: ${({ theme }) => theme.colors.text};
background-color: ${({ theme }) => theme.colors.background};
padding: 4px 10px;
margin: 4px 0;
border-radius: 4px;
font-weight: normal;
text-decoration: none;
width: 100%;
height: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
cursor: pointer;
margin: 0 auto;
transition: all 0.2s ease;
svg {
width: 20px;
height: 20px;
margin-right: 10px;
}
&:not(.active-link):hover {
color: ${({ theme }) => theme.colors.primary};
}
&.active-link {
color: ${({ theme }) => theme.colors.primary};
background-color: ${({ theme }) => theme.colors.shape};
}
@media (max-width: 780px) {
&.active-link {
background: ${({ theme }) => theme.colors.shape};
}
}
}
`;
export const SubItem = styled(List)`
margin: 5px 0 0 0;
`;
export const Select = styled.select`
border: 1px solid #6C6C808C;
padding: 0.5rem;
margin: 2rem 0 1rem;
width: 100%;
`;

View File

@ -0,0 +1,15 @@
export default {
colors: {
primary: '#1890FF',
background: '#FFFFFF',
shape: `#F2F2FA`,
title: `#3D3D4D`,
text: `#6C6C80`,
components: {
blockquote: {
background: `#332616`,
text: `#E1E1E6`,
},
},
},
};

View File

@ -0,0 +1,27 @@
/* eslint-disable */
export const copyToClipboard = (str) => {
const { clipboard } = window.navigator;
if (!clipboard || typeof clipboard.writeText !== `function`) {
const textarea = document.createElement(`textarea`);
textarea.value = str;
textarea.setAttribute(`readonly`, true);
textarea.setAttribute(`contenteditable`, true);
textarea.style.position = `absolute`;
textarea.style.left = `-9999px`;
document.body.appendChild(textarea);
textarea.select();
const range = document.createRange();
const sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
textarea.setSelectionRange(0, textarea.value.length);
document.execCommand(`copy`);
document.body.removeChild(textarea);
return Promise.resolve(true);
}
return clipboard.writeText(str);
};

View File

@ -0,0 +1,11 @@
export default function slugify(string) {
return string
.toString() // Cast to string
.toLowerCase() // Convert the string to lowercase letters
.trim() // Remove whitespace from both sides of a string
.replace(/\s/g, '-') // Replace each space with -
.replace(
/[^\w\-\u00b4\u00C0-\u00C3\u00c7\u00C9-\u00CA\u00CD\u00D3-\u00D5\u00DA\u00E0-\u00E3\u00E7\u00E9-\u00EA\u00ED\u00F3-\u00F5\u00FA]+/g,
'',
); // Removes all chars that aren't words, -, ´ or some latin characters (À Á Â Ã Ç É Ê Í Ó Ô Õ Ú à á â ã ç é ê í ó ô õ ú)
}

View File

@ -0,0 +1,5 @@
function isExternalUrl(url) {
return new RegExp('^((https?:)?//)', 'i').test(url);
}
module.exports = { isExternalUrl };

View File

@ -0,0 +1,18 @@
import React from 'react';
import { Link } from 'gatsby';
import Layout from '@rocketseat/gatsby-theme-docs/src/components/Layout';
import SEO from '@rocketseat/gatsby-theme-docs/src/components/SEO';
export default function NotFound() {
return (
<Layout title="Page not found!">
<SEO title="404: Not found" />
<p>You just hit a route that doesn&#39;t exist... the sadness.</p>
<p>
If you&#39;d like to go back to homepage, <Link to="/">click here</Link>
.
</p>
</Layout>
);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

14640
tools/gendocs/yarn.lock Normal file

File diff suppressed because it is too large Load Diff