Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 9 additions & 14 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "22.14.0"
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: pnpm
- run: pnpm install
- run: pnpm lint
- run: pnpm format
test:
name: Run tests
runs-on: ubuntu-latest
strategy:
matrix:
package:
- delta-theme
- delta-site
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "22.14.0"
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: pnpm
- run: pnpm install
- run: pnpm --filter ${{ matrix.package }} test:ci
- run: pnpm test:ci
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pnpm-debug.log*
# jetbrains setting folder
.idea/

# environment variables
.env

# Netlify
Expand Down
139 changes: 120 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<p align="center">
<a href="https://delta.io">
<img alt="Delta Lake" src="packages/delta-site/public/images/icon.png" width="60" />
<img alt="Delta Lake" src="public/images/icon.png" width="60" />
</a>
</p>
<h1 align="center">Delta Lake Website</h1>
Expand All @@ -17,13 +17,13 @@

### Quick start

This project requires a YouTube API key which is used on various pages across the site. To generate an API key, refer to the docs on [Google Cloud](https://developers.google.com/youtube/v3/getting-started#before-you-start). Once you have generated an API key, create a file at `packages/delta-site/.env` with the following contents:
This project requires a YouTube API key which is used on various pages across the site. To generate an API key, refer to the docs on [Google Cloud](https://developers.google.com/youtube/v3/getting-started#before-you-start). Once you have generated an API key, create a file at `.env` with the following contents:

```sh
YOUTUBE_API_KEY=<api_key>
```

Then, to get up and running on your machine, first start by [installing pnpm](https://pnpm.io/installation).
Then, to get up and running on your machine. First start by [installing pnpm](https://pnpm.io/installation).

Afterwards, install dependencies:

Expand All @@ -34,7 +34,7 @@ pnpm install
Finally, you can run a local Astro dev server by running the following command:

```sh
pnpm --filter delta-site dev
pnpm dev
```

### Code formatting
Expand All @@ -45,19 +45,6 @@ Alternatively, you may run `pnpm lint` or `pnpm format` to run ESLint and Pretti

This repo runs automated checks on PRs, including the lint and formatting checks above. All PRs require linters to pass in order to deploy to production.

### Deployment process

The deployment process is automated. When the `main` branch is updated, the site is automatically deployed to production. On every PR, a branch preview will automatically be generated. This allows reviewers to preview your work in progress.

### Project structure

We use a monorepo pattern to separate individual packages. We currently have two packages:

- **delta-site** - The delta.io website source code. Contains the site content, including blog posts.
- **delta-theme** - The underlying theme and plugin configuration used by delta-site.

Please refer to the README for each respective package for more details about them.

### Upgrading dependencies

It's a best practice to make sure that our dependencies are always up to date. You can run `scripts/upgrade-dependencies` to automatically install upgrades across all packages.
Expand All @@ -71,6 +58,120 @@ Do note that you will still need to verify that things work as expected.
- [YouTube Data API](https://developers.google.com/youtube/v3/docs) - for working with the YouTube API. 
- [Netlify documentation](https://docs.netlify.com/)

### Deployment process

The deployment process is automated. When the `main` branch is updated, the site is automatically deployed to production. On every PR, a branch preview will automatically be generated. This allows reviewers to preview your work in progress.

## Content collections

### Blogs

Blogs can be found in `src/content/blogs`.

Each blog is contained in its own directory with an `index.md` and other files (such as images) co-located together. Each directory uses the following naming structure: `YYYY-MM-DD-blog-title`

Each blog post requires the following frontmatter:

```md
---
title: New features in the Python deltalake 0.12.0 release
description: This post explains the new features in the Python deltalake 0.12.0 release
thumbnail: "./thumbnail.png"
author: ion-koutsouris
publishedAt: 2023-10-22
---
```

Overview of each field:

- **title:** Blog post title
- **description:** Blog post description
- **thumbnail:** Relative path to blog post thumbnail (usually `./thumbnail.png`)
- **author:** One or more `profile` IDs (see below). **IMPORTANT:** Profile IDs must exactly match the directory name in `src/content/profiles/`. For multiple authors, use a YAML array format:
```
author:
- carly-akerly
- robert-pack
```
Or for a single author:
```
author: ion-koutsouris
```
**If adding a new author:** Create a new profile folder in `src/content/profiles/[author-name]/` with an `index.md` file containing the required frontmatter (see Profiles section below).
- **publishedAt:** `YYYY-MM-DD` format date of when the post was published. **REQUIRED FIELD** - This date must exactly match the date in the directory name (e.g., if directory is `2025-09-25-Delta-Lake-4.0`, then `publishedAt` must be `2025-09-25`)

Other optional fields:

- **updatedAt:** If set, it will indicate that the blog post was last updated at this date.

The remaining content of the markdown file is the blog post body.

### Profiles

Profiles can be found in `src/content/profiles`.

Profiles represent individual contributors to the site. These are used throughout the site for different types of content types, including blogs and user stories. Profiles can be as simple as just their name, to full-featured pages with a description, quote, list of links, content, etc.

Like blog posts, they are also a directory with a `index.md` file and can have other files (such as images) co-located together. However, there is no requirement for the naming structure of the directory.

Each profile requires the following frontmatter:

```md
---
name: Ada Lovelace
---
```

Overview of each field:

- **name:** The person's full name (note: this should match the directory name)

Other optional fields:

- **photo:** Relative path to a photo of the person (photos should be in the folder)
- **role:** Optional job title/role to display alongside the person's name.
- **quote:** A quote to display on their profile page.
- **quoteSource:** A citation for their quote
- **linkedin:** The person's LinkedIn profile URL.
- **videos:** List of YouTube video IDs that can be featured on their profile.
- **otherReferences:** List of links that can be displayed on their profile.

### User stories

User stories can be found in `src/content/user-stories`.

User stories represent case studies. They are similar to blog posts, but are featured in the **Learn > Case Studies** page.

Like blog posts, they are also a directory with a `index.md` file and can have other files (such as images) co-located together. However, there is no requirement for the naming structure of the directory.

User stories require the following frontmatter

```md
---
title: Introducing Product Analytics on Delta Sharing, With Kubit
description: How Kubit and Delta Sharing improve product analytics
thumbnail: "./thumbnail.png"
author: stefan-enev
publishedAt: 2025-01-02
---
```

Overview of each field:

- **title:** User story title
- **description:** User story description
- **thumbnail:** Relative path to the thumbnail (usually `./thumbnail.png`)
- **author:** One or more `profile` IDs (see below)
- **publishedAt:** `YYYY-MM-DD` format date of when the user story was published

### Integrations

Profiles can be found in `src/content/integrations`.

Integrations are displayed on the **Integrations** page. Unlike other content types, they are JSON files.

Images for integrations live in the `src/content/integrations/images` directory.

## :handshake: Contributing

All changes are proposed as a [pull request](https://github.com/delta-io/website/pulls). Simply create a pull request and request a review and we'll get on it.
Expand All @@ -85,7 +186,7 @@ Please create an issue with your proposed title before writing the blog post!

Blog posts should generally be around 2,000 words, target a relevant, high-value keyword, and be easy to read.

You can add a blog by adding a directory with some files to `packages/delta-site/src/content/blog`. Here's an example:
You can add a blog by adding a directory with some files to `src/content/blog`. Here's an example:

```
packages/
Expand Down Expand Up @@ -113,4 +214,4 @@ Guidelines:
---
```

Keep in mind that the `author` metadata refers to a profile under `packages/delta-site/src/content/profiles`.
Keep in mind that the `author` metadata refers to a profile under `src/content/profiles`.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions netlify.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[build]
base = "."
publish = "packages/delta-site/dist/"
command = "pnpm --filter delta-site build"
publish = "/dist"
command = "pnpm build"
38 changes: 29 additions & 9 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@
"name": "delta-site",
"private": true,
"type": "module",
"description": "",
"main": "index.js",
"description": "Official website for Delta Lake",
"engines": {
"node": ">=22.14.0"
},
"scripts": {
"dev": "astro dev",
"test": "vitest",
"test:ci": "vitest run",
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
"lint": "eslint .",
"format": "prettier --write .",
"prepare": "husky"
Expand All @@ -18,8 +23,7 @@
],
"**/*": "prettier --write --ignore-unknown"
},
"keywords": [],
"author": "",
"author": "Databricks OSS Team",
"license": "ISC",
"packageManager": "[email protected]+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67",
"pnpm": {
Expand All @@ -28,22 +32,38 @@
}
},
"dependencies": {
"@tailwindcss/vite": "^4.1.17",
"tailwindcss": "^4.1.17"
"@astrojs/netlify": "^6.5.13",
"@astrojs/rss": "^4.0.12",
"@fontsource-variable/source-code-pro": "^5.2.7",
"@fontsource/source-sans-pro": "^5.2.5",
"@pagefind/default-ui": "^1.4.0",
"@types/mdast": "^4.0.4",
"astro-config": "^0.2.1",
"astro-favicons": "^3.1.5",
"astro-orbit": "^0.1.0",
"astro": "^5.14.7",
"googleapis": "^164.1.0",
"pagefind": "^1.4.0",
"remark-directive": "^4.0.0",
"unist-util-visit": "^5.0.0"
},
"devDependencies": {
"@astrojs/sitemap": "^3.6.0",
"@eslint/js": "^9.38.0",
"@typescript-eslint/parser": "^8.46.2",
"eslint": "^9.38.0",
"clsx": "^2.1.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-astro": "^1.3.1",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.5.4",
"eslint": "^9.38.0",
"globals": "^16.4.0",
"husky": "^9.1.7",
"lint-staged": "^16.2.5",
"prettier": "^3.6.2",
"prettier-plugin-astro": "^0.14.1",
"typescript-eslint": "^8.46.2"
"prettier": "^3.6.2",
"sharp": "^0.34.4",
"typescript-eslint": "^8.46.2",
"vitest": "^3.2.4"
}
}
2 changes: 0 additions & 2 deletions packages/delta-site/.gitignore

This file was deleted.

Loading
Loading