167 lines
3.9 KiB
Bash
Executable File
167 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
set -e
|
||
|
||
echo "📦 Starte interaktive Einrichtung für semantic-release + Gitea (mit Gitea Workflow)"
|
||
|
||
# 1. Benutzer-Eingaben
|
||
read -p "🔗 Gitea API URL (z. B. https://gitea.example.com): " GITEA_API
|
||
read -p "👤 Gitea Benutzername: " GITEA_USER
|
||
read -p "📁 Repository-Name (z. B. meinprojekt): " GITEA_REPO
|
||
read -p "🔀 Hauptbranch (Standard: main): " BRANCH
|
||
BRANCH=${BRANCH:-main}
|
||
|
||
echo ""
|
||
echo "📁 Initialisiere npm-Projekt..."
|
||
npm init -y
|
||
|
||
echo "📥 Installiere Dev-Dependencies..."
|
||
npm install --save-dev \
|
||
commitizen \
|
||
cz-conventional-changelog \
|
||
semantic-release \
|
||
@semantic-release/git \
|
||
@semantic-release/changelog \
|
||
@semantic-release/commit-analyzer \
|
||
@semantic-release/release-notes-generator \
|
||
json
|
||
|
||
echo "🧠 Erstelle .czrc (wird ignoriert)"
|
||
cat > .czrc <<EOF
|
||
{
|
||
"path": "cz-conventional-changelog"
|
||
}
|
||
EOF
|
||
|
||
echo "🧠 Erstelle .releaserc.json (wird ignoriert)"
|
||
cat > .releaserc.json <<EOF
|
||
{
|
||
"branches": ["$BRANCH"],
|
||
"plugins": [
|
||
"@semantic-release/commit-analyzer",
|
||
"@semantic-release/release-notes-generator",
|
||
[
|
||
"@semantic-release/changelog",
|
||
{
|
||
"changelogFile": "CHANGELOG.md"
|
||
}
|
||
],
|
||
[
|
||
"@semantic-release/git",
|
||
{
|
||
"assets": ["CHANGELOG.md"],
|
||
"message": "chore(release): \${nextRelease.version} [skip ci]\\n\\n\${nextRelease.notes}"
|
||
}
|
||
]
|
||
]
|
||
}
|
||
EOF
|
||
|
||
echo "📄 Erweitere package.json (wird ignoriert)"
|
||
npx json -I -f package.json -e 'this.scripts={"commit":"git-cz","release":"semantic-release"}'
|
||
npx json -I -f package.json -e 'this.version="0.0.0"'
|
||
|
||
echo "📄 Erstelle CHANGELOG.md (wird ignoriert)"
|
||
touch CHANGELOG.md
|
||
|
||
echo "🧹 Erstelle .gitignore"
|
||
cat > .gitignore <<EOF
|
||
# Node & npm
|
||
node_modules/
|
||
package-lock.json
|
||
|
||
# Config & meta
|
||
.czrc
|
||
.releaserc.json
|
||
CHANGELOG.md
|
||
create-gitea-release.sh
|
||
package.json
|
||
package-lock.json
|
||
|
||
# IDEs / Editor
|
||
.vscode/
|
||
.idea/
|
||
.DS_Store
|
||
|
||
# Logs / system
|
||
npm-debug.log*
|
||
yarn-debug.log*
|
||
yarn-error.log*
|
||
EOF
|
||
|
||
echo "📤 Erstelle Gitea Release Script im Workflow-Ordner"
|
||
mkdir -p .gitea/workflows
|
||
cat > .gitea/workflows/create-gitea-release.sh <<EOF
|
||
#!/bin/bash
|
||
|
||
VERSION=\$(node -p "require('./package.json').version")
|
||
API="$GITEA_API/api/v1"
|
||
REPO="$GITEA_USER/$GITEA_REPO"
|
||
TOKEN="\${GITEA_TOKEN}"
|
||
|
||
CHANGELOG_BODY=\$(awk '/^## /{exit} {print}' CHANGELOG.md | sed ':a;N;\$!ba;s/\\n/\\\\n/g')
|
||
|
||
curl -X POST "\$API/repos/\$REPO/releases" \\
|
||
-H "Authorization: token \$TOKEN" \\
|
||
-H "Content-Type: application/json" \\
|
||
-d "{
|
||
\\\"tag_name\\\": \\\"v\$VERSION\\\",
|
||
\\\"name\\\": \\\"v\$VERSION\\\",
|
||
\\\"body\\\": \\\"\$CHANGELOG_BODY\\\",
|
||
\\\"draft\\\": false,
|
||
\\\"prerelease\\\": false
|
||
}"
|
||
EOF
|
||
|
||
chmod +x .gitea/workflows/create-gitea-release.sh
|
||
|
||
echo "📂 Erstelle Gitea Workflow (.gitea/workflows/release.yml)"
|
||
cat > .gitea/workflows/release.yml <<EOF
|
||
name: Release
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- $BRANCH
|
||
|
||
jobs:
|
||
release:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Check out code
|
||
uses: actions/checkout@v3
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v3
|
||
with:
|
||
node-version: '20'
|
||
|
||
- name: Install dependencies
|
||
run: npm ci
|
||
|
||
- name: Run semantic-release
|
||
run: npx semantic-release
|
||
|
||
- name: Create Gitea release
|
||
run: .gitea/workflows/create-gitea-release.sh
|
||
env:
|
||
GITEA_TOKEN: \${{ secrets.GITEA_TOKEN }}
|
||
EOF
|
||
|
||
echo ""
|
||
echo "✅ Einrichtung abgeschlossen. Nur Workflow-Dateien sind für Git relevant."
|
||
|
||
echo ""
|
||
echo "📦 Nächste Schritte:"
|
||
echo " - Commit mit: npm run commit"
|
||
echo " - Push auf '$BRANCH'"
|
||
echo " - In Gitea unter Settings → Secrets → Repository Secrets den GITEA_TOKEN anlegen"
|
||
echo " - Nach Push läuft der Workflow automatisch und erstellt Release + Tag"
|
||
|
||
echo ""
|
||
echo "💡 Zum manuellen Testen:"
|
||
echo " export GITEA_TOKEN=dein_api_token"
|
||
echo " npx semantic-release"
|
||
echo " .gitea/workflows/create-gitea-release.sh"
|
||
|