95 lines
3.3 KiB
YAML
95 lines
3.3 KiB
YAML
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: docker
|
|
|
|
steps:
|
|
- name: Check out repo
|
|
uses: https://data.forgejo.org/actions/checkout@v4
|
|
|
|
- name: Install Packages
|
|
run: apt-get update && apt-get install -y sudo curl jq
|
|
|
|
- name: Install Nix
|
|
uses: https://github.com/cachix/install-nix-action@v30
|
|
|
|
- name: Install Bun
|
|
uses: oven-sh/setup-bun@v2
|
|
|
|
- name: Install dependencies
|
|
run: bun install --frozen-lockfile
|
|
|
|
- name: Setup Android Keystore
|
|
env:
|
|
KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
|
|
KEYSTORE_PROPERTIES: ${{ secrets.ANDROID_KEYSTORE_PROPERTIES }}
|
|
run: |
|
|
bun -e "require('fs').writeFileSync('keystore.jks', Buffer.from(process.env.KEYSTORE_BASE64.replace(/\s+/g, ''), 'base64'))"
|
|
bun -e "const content = process.env.KEYSTORE_PROPERTIES.replace(/\\\\n/g, '\n').replace(/\\r/g, '').split('\n').map(l => l.trim()).filter(l => l).join('\n'); require('fs').writeFileSync('keystore.properties', content)"
|
|
|
|
- name: Build
|
|
run: bun run build:apps
|
|
|
|
- name: Install rsync
|
|
run: apt-get update && apt-get install -y rsync
|
|
|
|
- name: Deploy
|
|
run: rsync -a --delete apps/web/dist/ /var/lib/www/tensamin-web-prod/
|
|
|
|
- name: Read version
|
|
id: version
|
|
run: |
|
|
VERSION="$(node -p "require('./package.json').version")"
|
|
echo "version=$VERSION" >> "$FORGEJO_OUTPUT"
|
|
echo "tag=v$VERSION" >> "$FORGEJO_OUTPUT"
|
|
|
|
- name: Create release and upload files
|
|
env:
|
|
TOKEN: ${{ forgejo.token }}
|
|
API: ${{ forgejo.api_url }}
|
|
REPO: ${{ forgejo.repository }}
|
|
SHA: ${{ forgejo.sha }}
|
|
TAG: ${{ steps.version.outputs.tag }}
|
|
VERSION: ${{ steps.version.outputs.version }}
|
|
run: |
|
|
set -eu
|
|
|
|
test -d releases
|
|
find releases -type f | grep -q .
|
|
|
|
HTTP_STATUS=$(curl -s -w "%{http_code}" -o release_out.json -H "Authorization: token $TOKEN" "$API/repos/$REPO/releases/tags/$TAG")
|
|
|
|
if [ "$HTTP_STATUS" = "200" ]; then
|
|
echo "Release $TAG already exists."
|
|
RELEASE_ID="$(jq -r .id release_out.json)"
|
|
else
|
|
echo "Creating new release for $TAG"
|
|
RELEASE_JSON="$(curl -f -sS -X POST "$API/repos/$REPO/releases" \
|
|
-H "Authorization: token $TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$(jq -n \
|
|
--arg tag "$TAG" \
|
|
--arg name "$TAG" \
|
|
--arg body "Release $VERSION" \
|
|
--arg target "$SHA" \
|
|
'{
|
|
tag_name: $tag,
|
|
name: $name,
|
|
body: $body,
|
|
target_commitish: $target,
|
|
draft: false,
|
|
prerelease: false
|
|
}')")"
|
|
RELEASE_ID="$(echo "$RELEASE_JSON" | jq -r .id)"
|
|
fi
|
|
|
|
find releases -type f -print0 | while IFS= read -r -d '' file; do
|
|
name="$(basename "$file")"
|
|
curl -fsS -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$name" \
|
|
-H "Authorization: token $TOKEN" \
|
|
-F "attachment=@$file"
|
|
done
|