diff --git a/.github/workflows/CreateRelease.yml b/.github/workflows/CreateRelease.yml new file mode 100644 index 0000000..a5d1ebc --- /dev/null +++ b/.github/workflows/CreateRelease.yml @@ -0,0 +1,97 @@ +name: Create Release + +on: + push: + branches: + - main + paths: + - 'package.json' + workflow_dispatch: # Allows manual execution of the workflow. + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.8.0' + + - name: Install Dependencies + run: npm install + + - name: Run Tests + run: npm run test:verbose + + - name: Build the Project + run: npm run build:tsc + + - name: Get the version + id: get_version + run: | + VERSION=$(npm run version:show | tail -n 1) + echo "VERSION=$VERSION" >> $GITHUB_ENV + shell: bash + + - name: Get previous release tag + id: get_previous_release + run: | + echo "Fetching previous release tag..." + previous_tag=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") + if [ -z "$previous_tag" ]; then + echo "No previous tag found, using initial commit." + previous_tag=$(git rev-list --max-parents=0 HEAD) + fi + echo "Previous tag: $previous_tag" + echo "PREVIOUS_TAG=$previous_tag" >> $GITHUB_ENV + shell: bash + + - name: Check if version changed + id: check_version + run: | + if [ "${{ env.VERSION }}" == "${{ env.PREVIOUS_TAG }}" ]; then + echo "Version has not changed. No release will be created." + exit 0 + fi + shell: bash + + - name: Generate release notes + id: generate_notes + run: | + echo "Generating release notes from ${{ env.PREVIOUS_TAG }} to HEAD..." + repo_url=$(git config --get remote.origin.url) + notes=$(git log ${{ env.PREVIOUS_TAG }}..HEAD --pretty=format:"- [\`%h\`]($repo_url/commit/%H): %s%n") + echo "Release notes:" + echo "$notes" + echo "### Changes in this release" > release_notes.md + echo "$notes" >> release_notes.md + shell: bash + + - name: Create Tag + id: create_tag + run: | + git tag ${{ env.VERSION }} + git push origin ${{ env.VERSION }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + + - name: Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ env.VERSION }} + name: Release ${{ env.VERSION }} + body_path: release_notes.md + files: | + ./dist/** + ./README.md + ./LICENSE + ./package.json + ./tsconfig.json + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/PullRequestTest.yml b/.github/workflows/PullRequestTest.yml index 71e031a..259edc9 100644 --- a/.github/workflows/PullRequestTest.yml +++ b/.github/workflows/PullRequestTest.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + workflow_dispatch: # Allows manual execution of the workflow. jobs: build-and-test: diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json index 072af62..af4d51c 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.0.1", "description": "", "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { "build:tsc": "tsc", "lint": "eslint --ext .ts .",