feat: CI Pipeline accomodation #2
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish Release | |
on: | |
push: | |
tags: | |
- "v*" | |
jobs: | |
Github: | |
name: Github Release (Draft) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: "20" | |
- name: Install standard-version npm package | |
run: npm install -g standard-version | |
- name: Generate changelog notes | |
run: | | |
curr_release=$(git describe --tags) | |
prev_release=$(git describe --tags --abbrev=0 $(git rev-list --tags --skip=1 --max-count=1) 2>/dev/null || echo "") | |
echo ">> ${prev_release}..${curr_release} <<" | |
git log ${prev_release}..${curr_release} --pretty=format:"%s" > commits.txt | |
git tag -d "$curr_release" | |
standard-version --release-as "$curr_release" --skip.commit --skip.tag --dry-run | tail -n +5 | awk '/---/{exit} {print}' > changelog.txt | |
echo "$curr_release" > release_tag.txt | |
echo "CHANGELOGS: " | |
cat changelog.txt | |
- name: Generate release notes | |
run: | | |
cat changelog.txt | tail -n +3 > release_notes.txt | |
echo "RELEASE NOTES: " | |
cat release_notes.txt | |
- name: Install GitHub CLI - gh | |
run: | | |
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y) | |
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ | |
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ | |
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ | |
&& sudo apt update \ | |
&& sudo apt install gh -y | |
- name: Configure GitHub CLI - gh | |
run: gh auth login --with-token <<< "${{ secrets.GH_PAT }}" | |
- name: Draft Release | |
run: | | |
curr_release=$(cat release_tag.txt) | |
gh release create --draft "$curr_release" --title "$curr_release" --notes-file release_notes.txt | |
- name: Configure SSH keys | |
env: | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
SSH_PUBLIC_KEY: ${{ secrets.SSH_PUBLIC_KEY }} | |
run: | | |
mkdir -p ~/.ssh | |
echo "$SSH_PRIVATE_KEY" > ~/.ssh/proffapt | |
echo "$SSH_PUBLIC_KEY" > ~/.ssh/proffapt.pub | |
chmod 600 ~/.ssh/proffapt | |
chmod 600 ~/.ssh/proffapt.pub | |
- name: Clean repository | |
run: | | |
rm commits.txt release_notes.txt | |
git checkout -b main | |
git pull origin main | |
git fetch --tags | |
- name: Update changelog file | |
run: | | |
changelog_file=".github/CHANGELOG.md" | |
logs=$(cat changelog.txt) | |
if [ -s "$changelog_file" ]; then | |
old_logs=$(tail -n +2 "$changelog_file") | |
latest_tag=$(cat release_tag.txt) | |
if grep -q "${latest_tag}" "$changelog_file"; then | |
echo "Changelog already up-to-date" | |
else | |
echo -e "# CHANGELOG\n\n $logs\n\n $old_logs" > "$changelog_file" | |
echo "Changelog updated successfully" | |
fi | |
else | |
echo -e "# CHANGELOG\n\n $logs" > "$changelog_file" | |
echo "Changelog generated successfully" | |
fi | |
- name: Configure git | |
run: | | |
git config user.email "[email protected]" | |
git config user.name "proffapt" | |
git config gpg.format ssh | |
git config user.signingkey ~/.ssh/proffapt.pub | |
- name: Commit & push changes | |
run: | | |
rm changelog.txt | |
files=(".github/CHANGELOG.md") | |
for file in "${files[@]}"; do | |
if [ -n "$(git status --porcelain $file)" ]; then | |
git add $file | |
git commit -S -m "chore(release): update $(basename $file)" | |
git push origin $(git rev-parse --abbrev-ref HEAD) | |
else | |
echo "No changes in $file." | |
fi | |
done | |
Chrome: | |
name: Chrome Web Store Release (Publish) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: "20" | |
- name: Install chrome-webstore-upload-cli npm package | |
run: npm install -g chrome-webstore-upload-cli | |
- name: Release to Chrome Web Store | |
working-directory: extension-src/chrome | |
run: chrome-webstore-upload upload --auto-publish | |
env: | |
EXTENSION_ID: ${{ secrets.GOOGLE_EXTENSION_ID }} | |
CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} | |
CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} | |
REFRESH_TOKEN: ${{ secrets.GOOGLE_REFRESH_TOKEN }} | |
Firefox: | |
name: Mozilla Add-On Store Release (Publish) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: "20" | |
- name: Install web-ext npm package | |
run: npm install -g web-ext | |
- name: Build the extension | |
working-directory: extension-src/firefox | |
run: web-ext build | |
- name: Release to Mozilla Add-On Store | |
working-directory: extension-src/firefox | |
run: web-ext sign --use-submission-api --channel listed | |
env: | |
WEB_EXT_API_KEY: ${{ secrets.WEB_EXT_API_KEY }} | |
WEB_EXT_API_SECRET: ${{ secrets.WEB_EXT_API_SECRET }} |