Skip to content

build-and-release

build-and-release #21

name: build-and-release
on:
# Run monthly on the 1st, 10AM UTC
schedule:
- cron: "0 10 1 * *"
# Allow manual activations.
workflow_dispatch:
permissions:
# Allow release creation
contents: write
env:
# prevents warnings in the vscode editor.
RELEASE_TAG: ""
PACKAGE_TAG: ""
jobs:
# ----- Parameters collection job
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout this repo
uses: actions/checkout@v4
# E.g. "2025-11-02"
- name: Determine release tag
run: |
release_tag="$(date +'%Y-%m-%d')"
echo $release_tag
echo "RELEASE_TAG=$release_tag" >> $GITHUB_ENV
# E.g. "20251102"
- name: Determine package tag
run: |
package_tag="${RELEASE_TAG//-/}"
echo $package_tag
echo "PACKAGE_TAG=$package_tag" >> $GITHUB_ENV
- name: Determine package file name
run: |
package_name="apio-vscode-${PACKAGE_TAG}.vsix"
echo $package_name
echo "PACKAGE_NAME=$package_name" >> $GITHUB_ENV
- name: Install Node
uses: actions/setup-node@v6
with:
node-version: 24
- name: Verify npx
run: npx --version
- name: Install dependencies
run: npm ci
- name: Build extension package
run: |
ls -al
npx vsce package
ls -al
- name: Rename package file
run: |
mv apio*.vsix $PACKAGE_NAME
ls -al
- name: Show packaged files
run: |
unzip -l $PACKAGE_NAME
# Delete old pre-releases, keeps all releases.
- name: Delete old pre-releases
uses: sgpublic/delete-release-action@v1.2
with:
# Keep all stable releases .
release-drop: false
# Delete old pre-releases, keep the newest 10 (excluding the absolute latest)
pre-release-drop: true
pre-release-keep-count: 5
pre-release-drop-tag: true # Also delete tags of deleted pre-releases
# Keep all drafts.
draft-drop: false
env:
GITHUB_TOKEN: ${{ github.token }}
# In case we overwrite and exiting release.
- name: Force release tag update
run: |
git tag -f ${{env.RELEASE_TAG}}
git push origin -f ${{env.RELEASE_TAG}}
- name: Create GitHub release
uses: softprops/action-gh-release@v2.2.2
with:
tag_name: ${{env.RELEASE_TAG}}
name: ${{env.RELEASE_TAG}}
preserve_order: true
prerelease: true
fail_on_unmatched_files: true
files: |
apio-vscode-${{env.PACKAGE_TAG}}.vsix