diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index dabbd13..b38755e 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -7,23 +7,63 @@ env: NIX_CONFIG: experimental-features = nix-command flakes jobs: - deploy: + deploy-and-package: runs-on: nixos steps: - - name: Install node & pnpm - run: nix profile add nixpkgs#nodejs_24 nixpkgs#pnpm - - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Install tools and dependencies + run: | + nix profile add nixpkgs#nodejs_24 nixpkgs#pnpm nixpkgs#rsync nixpkgs#jq nixpkgs#gnused + pnpm install --frozen-lockfile - - name: Build - run: pnpm run build:all - - - name: Install rsync - run: nix profile add nixpkgs#rsync + - name: Build and package + run: | + pnpm pack + pnpm --filter @methanium/ui-showcase build - name: Deploy run: rsync -a --delete apps/showcase/dist/ /var/lib/www/methanium-ui/ + + - name: Create release and upload package + env: + TOKEN: ${{ forgejo.token }} + API: ${{ forgejo.api_url }} + REPO: ${{ forgejo.repository }} + SHA: ${{ forgejo.sha }} + run: | + set -eu + + TAG="$(node -p "require('./package.json').version")" + PACKAGE="methanium-ui.tgz" + + test -f "$PACKAGE" + + 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 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 target "$SHA" \ + '{ + tag_name: $tag, + name: $tag, + body: "This is an automated release.", + target_commitish: $target, + draft: false, + prerelease: false + }')")" + RELEASE_ID="$(echo "$RELEASE_JSON" | jq -r .id)" + fi + + curl -fsS -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$PACKAGE" \ + -H "Authorization: token $TOKEN" \ + -F "attachment=@$PACKAGE" diff --git a/.forgejo/workflows/package.yaml b/.forgejo/workflows/package.yaml deleted file mode 100644 index 5861b84..0000000 --- a/.forgejo/workflows/package.yaml +++ /dev/null @@ -1,89 +0,0 @@ -on: - push: - branches: - - main - -env: - NIX_CONFIG: experimental-features = nix-command flakes - -jobs: - package: - runs-on: nixos - steps: - - name: Install node & pnpm - run: nix profile add nixpkgs#nodejs_24 nixpkgs#pnpm - - - name: Check out repo - uses: https://data.forgejo.org/actions/checkout@v4 - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Install sed & jq - run: nix profile add nixpkgs#gnused nixpkgs#jq - - - name: Pack package - run: pnpm pack - - - name: Read release metadata - id: version - run: | - set -eu - - VERSION="$(node -p "require('./package.json').version")" - SHORT_SHA="$(git rev-parse --short=7 HEAD)" - TAG="$VERSION" - PRERELEASE="false" - PACKAGE="methanium-ui.tgz" - - test -f "$PACKAGE" - - echo "version=$VERSION" >> "$FORGEJO_OUTPUT" - echo "tag=$TAG" >> "$FORGEJO_OUTPUT" - echo "title=$TAG" >> "$FORGEJO_OUTPUT" - echo "prerelease=$PRERELEASE" >> "$FORGEJO_OUTPUT" - echo "package=$PACKAGE" >> "$FORGEJO_OUTPUT" - - - name: Create release and upload package - env: - TOKEN: ${{ forgejo.token }} - API: ${{ forgejo.api_url }} - REPO: ${{ forgejo.repository }} - SHA: ${{ forgejo.sha }} - TAG: ${{ steps.version.outputs.tag }} - TITLE: ${{ steps.version.outputs.title }} - PRERELEASE: ${{ steps.version.outputs.prerelease }} - PACKAGE: ${{ steps.version.outputs.package }} - run: | - set -eu - - 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 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 "$TITLE" \ - --arg body "This is an automated release." \ - --arg target "$SHA" \ - --argjson prerelease "$PRERELEASE" \ - '{ - tag_name: $tag, - name: $name, - body: $body, - target_commitish: $target, - draft: false, - prerelease: $prerelease - }')")" - RELEASE_ID="$(echo "$RELEASE_JSON" | jq -r .id)" - fi - - curl -fsS -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$PACKAGE" \ - -H "Authorization: token $TOKEN" \ - -F "attachment=@$PACKAGE"