Upload asset #69
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: Build Firefox Extension XPI | |
on: | |
push: | |
branches: [ wip/build-xpi ] | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: main | |
- name: Get latest tag version | |
id: get-version | |
run: | | |
version=$(git tag --sort=-creatordate | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 | cut -c 2-) | |
echo "VERSION=$version" >> $GITHUB_ENV | |
- name: Generate 8-digit date | |
id: get-date | |
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV | |
- name: Set XPI file name | |
run: | | |
echo "XPI_NAME=tabmix-dev-build" >> $GITHUB_ENV | |
- name: Replace version in install.rdf | |
run: | | |
sed -i "s/1.0.0-unbundeled/${{ env.VERSION }}-${{ env.DATE }}/" addon/install.rdf | |
- name: Upload XPI to Release | |
id: upload-artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.XPI_NAME }} | |
path: addon/ | |
- name: Download XPI from Release | |
id: download-artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.XPI_NAME }} | |
- name: Update dev-build tag | |
run: | | |
git tag -d dev-build && git tag dev-build $(git rev-parse HEAD) | |
- name: Update dev-build release | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{secrets.REPO_WORKFLOW_TOKEN}} | |
script: | | |
const { owner, repo } = context.repo | |
try { | |
const release = await github.rest.repos.getReleaseByTag({ | |
owner, | |
repo, | |
tag: 'dev-build', | |
}); | |
const releaseID = release.data.id | |
console.log('Update dev-build release, ID', releaseID) | |
const assets = await github.rest.repos.listReleaseAssets({ | |
owner, | |
repo, | |
release_id: releaseID, | |
}) | |
for (const asset of assets.data) { | |
if (asset.name === 'tabmix-dev-build.xpi') { | |
console.log('Delete existing asset', asset.name) | |
await github.rest.repos.deleteReleaseAsset({ | |
owner, | |
repo, | |
asset_id: asset.id, | |
}) | |
} | |
} | |
await github.rest.repos.updateRelease({ | |
owner, | |
repo, | |
release_id: releaseID, | |
tag_name: 'dev-build', | |
draft: false, | |
make_latest: 'legacy', | |
}) | |
console.log('dev-build release updated successfully') | |
} catch (error) { | |
console.log('dev-build release does not exist') | |
await github.rest.repos.createRelease({ | |
owner, | |
repo, | |
tag_name: 'dev-build', | |
draft: false, | |
prerelease: true, | |
make_latest: 'legacy', | |
name: 'Development Build', | |
body: 'This release includes an XPI file that is automatically generated after each push to the main branch.' | |
}); | |
console.log('dev-build release created successfully') | |
} | |
- name: Archive Release | |
uses: thedoctor0/[email protected] | |
with: | |
type: 'zip' | |
filename: ${{ env.XPI_NAME }} | |
- name: Upload asset | |
uses: ncipollo/[email protected] | |
with: | |
owner: 'onemen' | |
repo: 'TabMixPlus' | |
tag: 'dev-build' | |
allowUpdates: true | |
artifacts: ${{ env.XPI_NAME }}.zip | |
# - name: list files | |
# shell: bash | |
# # working-directory: ${{ github.workspace }} | |
# run: | | |
# echo ${{ secrets.GITHUB_TOKEN }} | gh auth login --with-token | |
# gh release upload dev-build ${{ steps.upload-artifact.outputs.artifact-url }} --clobber | |
# # gh release upload dev-build ${{ env.XPI_NAME }} --clobber | |
# # run: | | |
# # for filename in ./* ; do | |
# # echo "working on $filename..." | |
# # done | |
# - name: Upload new asset | |
# uses: actions/github-script@v7 | |
# with: | |
# github-token: ${{secrets.REPO_WORKFLOW_TOKEN}} | |
# script: | | |
# const { owner, repo } = context.repo; | |
# const releaseId = ${{ env.RELEASE_ID }}; | |
# // Use the captured artifact URL | |
# // const artifactUrl = '${{ steps.upload-artifact.outputs.artifact-url }}/${{ env.XPI_NAME }}.zip'; | |
# const artifactUrl = '${{ steps.upload-artifact.outputs.artifact-url }}'; | |
# const artifactDownloadPath = '${{ steps.download-artifact.outputs.download-path }}/${{ env.XPI_NAME }}.zip'; | |
# const runId = github.run_id; | |
# const xpiName = process.env.XPI_NAME; | |
# const artifactDownloadUrl = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/artifacts/${runId}/download-artifact/${encodeURIComponent(xpiName)}.zip`; | |
# console.log('-------------------------------------------'); | |
# console.log({artifactDownloadUrl}) | |
# console.log({artifactDownloadPath}) | |
# const assetName = 'tabmix-dev-build.xpi'; | |
# /* | |
# const artifactResponse = await fetch("https://api.github.com/repos/onemen/TabMixPlus/actions/artifacts"); | |
# if (!artifactResponse.ok) { | |
# throw new Error(`Can't find artifact id: ${artifactResponse.statusText}`); | |
# } | |
# // const data = await artifactResponse.json(); | |
# // const firstArtifactId = data.artifacts[0].id; | |
# // const artifactUrl = `https://github.com/onemen/TabMixPlus/actions/artifacts/${firstArtifactId}` | |
# */ | |
# // Download the artifact | |
# // const response = await fetch(artifactDownloadPath); | |
# const response = await fetch(artifactDownloadUrl); | |
# //console.log({firstArtifactId}) | |
# console.log({artifactUrl}) | |
# // console.log(response) | |
# console.log('-------------------------------------------') | |
# if (!response.ok) { | |
# throw new Error(`downloading artifact failed: ${response.statusText}`); | |
# } | |
# const asset = await response.arrayBuffer(); | |
# const assetSize = asset.byteLength; | |
# const assetContentType = 'application/x-xpinstall'; | |
# // Upload the asset | |
# await github.rest.repos.uploadReleaseAsset({ | |
# owner, | |
# repo, | |
# release_id: releaseId, | |
# name: assetName, | |
# data: asset, | |
# headers: { | |
# 'content-length': assetSize, | |
# 'content-type': assetContentType, | |
# }, | |
# }); |