diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml new file mode 100644 index 0000000..ae0016d --- /dev/null +++ b/.github/workflows/github-release.yml @@ -0,0 +1,81 @@ +name: Create GitHub Release + +on: + push: + tags: + - '[0-9]*' + +jobs: + build: + name: Create Release + runs-on: ubuntu-latest + env: + ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }} + IS_VALID_COMMIT: false + TAG_NAME: '' + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Log Token Type + run: | + if [ ${{ env.ACCESS_TOKEN }} == ${{ secrets.GITHUB_TOKEN }} ]; then + echo "🗝️ Authenticated with GitHub Token" + else + echo "🔑 Authenticated with Personal Access token" + fi + + - name: Validate Tag and Branch + id: validation + run: | + TAG=$(git tag --contains HEAD | grep '^[0-9]' | head -n 1) + echo "🏷️ Tag for commit is: $TAG" + BRANCH=$(git branch -r --contains tags/${GITHUB_REF_NAME} | grep 'origin/main' | xargs) + if [[ -z "$BRANCH" ]]; then + echo "🚨 Tag is not on main branch" + else + echo "🕊️ Current branch is: $BRANCH" + fi + if [[ -z "$TAG" || -z "$BRANCH" ]]; then + echo "IS_VALID_COMMIT=false" >> $GITHUB_ENV + echo "TAG_NAME=''" >> $GITHUB_ENV + else + echo "IS_VALID_COMMIT=true" >> $GITHUB_ENV + echo "TAG_NAME=$TAG" >> $GITHUB_ENV + fi + + - name: Release Notes + if: env.IS_VALID_COMMIT == 'true' + id: release-notes + uses: kitschpatrol/github-action-release-changelog@v2 + + - name: Release + if: env.IS_VALID_COMMIT == 'true' + id: release + uses: kitschpatrol/github-action-release@v2 + with: + token: ${{ env.ACCESS_TOKEN }} + draft: false + prerelease: false + name: ${{ env.TAG_NAME }} + tag_name: ${{ env.TAG_NAME }} + body: | + ${{ steps.release-notes.outputs.changelog }} + files: | + readme.md + README.md + LICENSE + license.txt + CHANGELOG + CHANGELOG.md + changelog.md + + - name: Log Release Details + if: env.IS_VALID_COMMIT == 'true' + run: | + echo "📦 Successfully released: ${{ env.TAG_NAME }}" + echo "🔗 Release URL: ${{ steps.release.outputs.url }}" + echo "🪪 Release ID: ${{ steps.release.outputs.id }}" diff --git a/.github/workflows/sync-metadata.yml b/.github/workflows/sync-metadata.yml new file mode 100644 index 0000000..4ab3e89 --- /dev/null +++ b/.github/workflows/sync-metadata.yml @@ -0,0 +1,48 @@ +name: Overwrite GitHub repo metadata with info from package.json +on: + push: + branches: [main] + workflow_dispatch: + +jobs: + build: + name: Sync Metadata + runs-on: ubuntu-latest + env: + IS_VALID_TOKEN: false + HAS_PACKAGE: false + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for package.json + run: | + if [ -f package.json ]; then + echo "📦 Found package.json" + echo "HAS_PACKAGE=true" >> $GITHUB_ENV + else + echo "❌ This action requires a package.json to run" + echo "HAS_PACKAGE=false" >> $GITHUB_ENV + fi + + - name: Validate Access Token + if: env.HAS_PACKAGE == 'true' + run: | + if [ -z ${{ secrets.PERSONAL_ACCESS_TOKEN }} ]; then + echo "❌ This action requires a Personal Access token to run" + echo "IS_VALID_TOKEN=false" >> $GITHUB_ENV + else + echo "🔑 Authenticated with Personal Access token" + echo "IS_VALID_TOKEN=true" >> $GITHUB_ENV + fi + + - name: Sync Package info to GitHub + if: env.IS_VALID_TOKEN == 'true' && env.HAS_PACKAGE == 'true' + uses: kitschpatrol/github-action-repo-sync@v2 + with: + TYPE: npm + PATH: package.json + TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}