Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ci] sync template files #1

Merged
merged 5 commits into from
Mar 4, 2025
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Changesets

Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)

We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
14 changes: 14 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
"changelog": [
"@changesets/changelog-github",
{ "repo": "trueberryless-org/releases" }
],
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
34 changes: 34 additions & 0 deletions .github/labeler.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# See https://github.com/actions/labeler/tree/v5

"🚨 action":
- changed-files:
- any-glob-to-any-file: .github/workflows/**

"📝 changeset":
- changed-files:
- any-glob-to-any-file: "**/.changeset/**.{md,mdx}"

"🚧 config":
- changed-files:
- any-glob-to-any-file: "**/*config*.{js,ts,jsx,tsx,mjs,mts,json,yml,yaml,toml,cjs,cts}"

"✒️ documentation":
- changed-files:
- any-glob-to-any-file: "**/README.md"

"🌏 i18n":
- changed-files:
- all-globs-to-any-file: ["**/docs/**", "!**/docs/en/**"]

"🚀 manifest":
- changed-files:
- any-glob-to-any-file: "manifest*/**"

"📦 package":
- changed-files:
- any-glob-to-any-file: "**/packages/**"
- any-glob-to-any-file: "**/package.json"

"🏯 styles":
- changed-files:
- any-glob-to-any-file: "**/*.{css,scss,sass,less,styl}"
208 changes: 208 additions & 0 deletions .github/workflows/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
name: Deployment

on:
push:
branches: [main]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }}
cancel-in-progress: true

env:
REGISTRY: docker.io
IMAGE_OWNER: trueberryless
IMAGE_NAME: releases
NODE_VERSION: 20

jobs:
changes:
name: Filter
runs-on: ubuntu-latest
outputs:
app: ${{ steps.filter.outputs.app }}
steps:
- name: Check out the repo
uses: actions/checkout@v4

- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
app:
- 'app/**'

changesets:
name: Changesets
runs-on: ubuntu-latest
outputs:
hasChangesets: ${{ steps.changesets.outputs.hasChangesets }}
permissions:
contents: write
pull-requests: write
steps:
- name: Generate GitHub App token
id: generate_token
uses: tibdex/[email protected]
with:
app_id: ${{ secrets.BOT_APP_ID }}
private_key: ${{ secrets.BOT_PRIVATE_KEY }}

- name: Checkout Repo
uses: actions/checkout@v4

- name: Setup PNPM
uses: pnpm/action-setup@v3

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: "pnpm"

- name: Install Dependencies
run: pnpm i

- name: Create Release Pull Request
id: changesets
uses: changesets/action@v1
with:
commit: "[ci] release"
title: "[ci] release"
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

image-tag:
name: Image Tag
runs-on: ubuntu-latest
outputs:
IMAGE_TAG: ${{ env.IMAGE_TAG }}
steps:
- name: Check out the repo
uses: actions/checkout@v4

- name: Read version from package.json
id: get_version
run: |
VERSION=$(jq -r '.version' app/package.json)
echo "IMAGE_TAG=$VERSION" >> $GITHUB_ENV

deployment:
needs: [changes, changesets, image-tag]
if: >
(
needs.changesets.outputs.hasChangesets == 'false' &&
(
contains(github.event.head_commit.message, 'deploy') ||
contains(github.event.head_commit.message, '[ci] release')
)
) ||
github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Check out the repo
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
package_json_file: ./app/package.json

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
cache-dependency-path: ./pnpm-lock.yaml

- name: Install dependencies
run: pnpm install
shell: bash
working-directory: ./app

- name: Build Website
run: pnpm run build
shell: bash
working-directory: ./app

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:${{ needs.image-tag.outputs.IMAGE_TAG }}
${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:latest
labels: ${{ steps.meta.outputs.labels }}

- name: Update deployment.yaml file
run: |
yq eval '.spec.template.spec.containers[0].image = "${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:${{ needs.image-tag.outputs.IMAGE_TAG }}"' -i manifest/deployment.yaml

- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: update deployment.json container image (automated)

release:
name: Release
needs: [image-tag, deployment]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Check out the repo
uses: actions/checkout@v4

- id: extract-changelog
uses: sean0x42/[email protected]
with:
file: app/CHANGELOG.md
pattern: ${{ needs.image-tag.outputs.IMAGE_TAG }}

- uses: ncipollo/release-action@v1
id: create_release
with:
tag: ${{ env.IMAGE_NAME }}-docs@${{ needs.image-tag.outputs.IMAGE_TAG }}
makeLatest: true
body: ${{ steps.extract-changelog.outputs.markdown }}
skipIfReleaseExists: true

- name: Check if release was created
id: check_release
run: |
if [ -z "${{ steps.create_release.outputs.html_url }}" ]; then
echo "RELEASE_SKIPPED=true" >> $GITHUB_ENV
else
echo "RELEASE_SKIPPED=false" >> $GITHUB_ENV
fi

- name: Discord notification
if: env.RELEASE_SKIPPED == 'false'
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL }}
uses: Ilshidur/[email protected]
with:
args: |
# ${{ env.IMAGE_NAME }}@${{ needs.image-tag.outputs.IMAGE_TAG }}

${{ steps.extract-changelog.outputs.markdown }}
37 changes: 37 additions & 0 deletions .github/workflows/format.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: autofix.ci
on:
pull_request:
push:
branches: [main]
permissions:
contents: read

jobs:
autofix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup PNPM
uses: pnpm/action-setup@v3

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"

- name: Install Dependencies
run: pnpm i

- name: Run prettier
run: pnpm exec prettier . --write

# Optimize all PNGs with https://pngquant.org/
- run: sudo apt-get update && sudo apt-get install -y pngquant
- name: Run pngquant
run: |
shopt -s globstar
find . -name '*.png' -exec pngquant --ext .png --force 256 {} \;

- uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c
55 changes: 55 additions & 0 deletions .github/workflows/labeler.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: "Pull Request Labeler"
on:
- pull_request_target

jobs:
labeler:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Generate GitHub App token
id: generate_token
uses: tibdex/[email protected]
with:
app_id: ${{ secrets.BOT_APP_ID }}
private_key: ${{ secrets.BOT_PRIVATE_KEY }}

- uses: actions/checkout@v4
- name: Ensure labels exist
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
run: |
gh label delete "bug" --yes || true
gh label delete "documentation" --yes || true
gh label delete "duplicate" --yes || true
gh label delete "enhancement" --yes || true
gh label delete "good first issue" --yes || true
gh label delete "help wanted" --yes || true
gh label delete "invalid" --yes || true
gh label delete "question" --yes || true
gh label delete "wontfix" --yes || true

gh label create "🚨 action" --description "Changes in GitHub workflows or actions" --color "A75AD5" --force
gh label create "🤖 bot" --description "Automatically generated pull request" --color "0075CA" --force
gh label create "🐛 bug" --description "Something isn't working" --color "D73A4A" --force
gh label create "📝 changeset" --description "Contains changeset files" --color "304EF9" --force
gh label create "🚧 config" --description "Configuration file updates" --color "C0ED4F" --force
gh label create "✒️ documentation" --description "Documentation updates, like README changes" --color "66741D" --force
gh label create "🔁 duplicate" --description "This issue or pull request already exists" --color "008672" --force
gh label create "⏫ enhancement" --description "New feature or request" --color "3C11FD" --force
gh label create "🥇 good first issue" --description "Good for newcomers" --color "7057FF" --force
gh label create "🆘 help wanted" --description "Extra attention is needed" --color "BFD4F2" --force
gh label create "🌏 i18n" --description "Updates to internationalized docs, excluding English" --color "006B75" --force
gh label create "👀 invalid" --description "This doesn't seem right" --color "E4E669" --force
gh label create "🚀 manifest" --description "Manifest-related changes" --color "96D3D7" --force
gh label create "📦 package" --description "Updates in package structure or package.json" --color "F34A37" --force
gh label create "❓ question" --description "Further information is requested" --color "D876E3" --force
gh label create "🏯 styles" --description "Stylesheets or design updates" --color "550F5A" --force
gh label create "🔒 wontfix" --description "This will not be worked on" --color "FFFFFF" --force

- uses: actions/labeler@v5
with:
configuration-path: .github/labeler.yaml
sync-labels: true
Loading
Loading