diff --git a/.github/workflows/publish-demo.yml b/.github/workflows/publish-demo.yml index 768efbc7..28a00c00 100644 --- a/.github/workflows/publish-demo.yml +++ b/.github/workflows/publish-demo.yml @@ -2,22 +2,11 @@ name: Publish Demo env: CI: true FORCE_COLOR: 1 -on: - push: - branches: - - master - paths: - - 'examples/demo/**' - - '.github/workflows/publish-demo.yml' - - 'pnpm-lock.yaml' - pull_request: - paths: - - 'packages/demo/**' - - '.github/workflows/publish-demo.yml' - - 'pnpm-lock.yaml' +on: [push] jobs: publish: runs-on: ubuntu-latest + if: github.ref_name == 'master' steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2.2.4 @@ -29,7 +18,48 @@ jobs: cache: 'pnpm' - run: pnpm install - run: pnpm -r --filter demo run build - - uses: fission-suite/publish-action@v1.2.7 + - uses: fission-suite/publish-action@feat/cid-output + id: fission with: machine_key: ${{ secrets.FISSION_MACHINE_KEY }} workdir: 'examples/demo' + - name: Add url to GITHUB_STEP_SUMMARY + run: | + echo " + ### App URL 🌐 + https://dweb.link/ipfs/${{ steps.fission.outputs.app_cid }} + " >> $GITHUB_STEP_SUMMARY + preview: + runs-on: ubuntu-latest + if: github.ref_name != 'master' + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2.2.4 + with: + version: 8 + - uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'pnpm' + - run: pnpm install + - run: pnpm -r --filter demo run build + env: + GITHUB_WORKFLOW_ID: ${{ github.run_id }} + - name: Add report to web3.storage + uses: web3-storage/add-to-web3@v2 + id: add_to_web3_storage + with: + path_to_add: examples/demo/dist + web3_token: ${{ secrets.WEB3_TOKEN }} + - name: Add url to GITHUB_STEP_SUMMARY + run: | + echo " + ### Preview URL 🌐 + ${{ steps.add_to_web3_storage.outputs.url }} + " >> $GITHUB_STEP_SUMMARY + - uses: mshick/add-pr-comment@v2 + with: + message-id: 'preview-url' + message: | + ### Preview URL 🌐 + ${{ steps.add_to_web3_storage.outputs.url }} diff --git a/examples/demo/package.json b/examples/demo/package.json index 98f8a6d9..fd7720cc 100644 --- a/examples/demo/package.json +++ b/examples/demo/package.json @@ -50,6 +50,7 @@ "@acab/reset.css": "^0.5.3", "@preact/signals": "^1.1.5", "clsx": "^2.0.0", + "dns-over-http-resolver": "^2.1.1", "filsnap-adapter": "workspace:^", "iso-base": "^1.1.1", "iso-filecoin": "^2.0.1", @@ -65,6 +66,7 @@ "@playwright/test": "^1.36.1", "@preact/preset-vite": "^2.5.0", "@types/node": "^20.4.4", + "tiny-git-rev-sync": "^0.1.0", "vite": "^4.4.7" }, "eslintConfig": { diff --git a/examples/demo/src/app.jsx b/examples/demo/src/app.jsx index d99fa69f..ffb262ed 100644 --- a/examples/demo/src/app.jsx +++ b/examples/demo/src/app.jsx @@ -6,9 +6,30 @@ import SignMessage from './components/sign-message.jsx' import { useFilsnapContext } from './hooks/filsnap.js' import ConnectFEVM from './components/connect-fevm.jsx' import Forward from './components/forward.tsx' +import { useEffect, useState } from 'preact/hooks' +import Resolver from 'dns-over-http-resolver' export function App() { const { isConnected } = useFilsnapContext() + const [cid, setCid] = /** @type {typeof useState} */ (useState)() + useEffect(() => { + async function main() { + try { + if (window.location.host.includes('ipfs.dweb.link')) { + const cid = window.location.host.split('.')[0] + setCid(cid) + return + } + const dnsRecord = await new Resolver().resolve( + `_dnslink.${window.location.host}`, + 'TXT' + ) + setCid(dnsRecord[0][0].replace('dnslink=/ipfs/', '')) + } catch {} + } + + main() + }, []) return (
@@ -53,6 +74,58 @@ export function App() { github.com/filecoin-project/filsnap +
  • + {' '} + CID:{' '} + + {cid || 'unknown'} + +
  • +
  • + {' '} + Release Job:{' '} + + {import.meta.env.GITHUB_WORKFLOW_ID || 'unknown'} + +
  • +
  • + {' '} + Git:{' '} + + {import.meta.env.GIT_BRANCH}{' '} + + {import.meta.env.GIT_COMMIT_HASH.slice(0, 7)} + {' '} + + {import.meta.env.GIT_TAG} + {' '} + {import.meta.env.GIT_DATE} + +
  • diff --git a/examples/demo/vite.config.js b/examples/demo/vite.config.js index bfe110c0..ad9e72d4 100644 --- a/examples/demo/vite.config.js +++ b/examples/demo/vite.config.js @@ -1,6 +1,19 @@ import { defineConfig } from 'vite' import preact from '@preact/preset-vite' +import * as child from 'child_process' +import * as git from 'tiny-git-rev-sync' + +const commitHash = child.execSync('git rev-parse HEAD').toString() export default defineConfig({ + define: { + 'import.meta.env.GIT_COMMIT_HASH': JSON.stringify(commitHash), + 'import.meta.env.GIT_BRANCH': JSON.stringify(git.gitBranch()), + 'import.meta.env.GIT_DATE': JSON.stringify(git.gitDate()), + 'import.meta.env.GIT_TAG': JSON.stringify(git.gitTag()), + 'import.meta.env.GITHUB_WORKFLOW_ID': JSON.stringify( + process.env.GITHUB_WORKFLOW_ID + ), + }, plugins: [preact()], }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a48425c..b377d913 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -53,6 +53,9 @@ importers: clsx: specifier: ^2.0.0 version: 2.0.0 + dns-over-http-resolver: + specifier: ^2.1.1 + version: 2.1.1 filsnap-adapter: specifier: workspace:^ version: link:../../packages/adapter @@ -93,6 +96,9 @@ importers: '@types/node': specifier: ^20.4.4 version: 20.4.4 + tiny-git-rev-sync: + specifier: ^0.1.0 + version: 0.1.0 vite: specifier: ^4.4.7 version: 4.4.7(@types/node@20.4.4) @@ -4483,6 +4489,13 @@ packages: dependencies: semver: 7.5.4 + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -5141,6 +5154,18 @@ packages: path-type: 4.0.0 dev: true + /dns-over-http-resolver@2.1.1: + resolution: {integrity: sha512-Lm/eXB7yAQLJ5WxlBGwYfBY7utduXPZykcSmcG6K7ozM0wrZFvxZavhT6PqI0kd/5CUTfev/RrEFQqyU4CGPew==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + native-fetch: 4.0.2(undici@5.22.1) + receptacle: 1.3.2 + undici: 5.22.1 + transitivePeerDependencies: + - supports-color + dev: false + /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -7383,6 +7408,14 @@ packages: hasBin: true dev: true + /native-fetch@4.0.2(undici@5.22.1): + resolution: {integrity: sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==} + peerDependencies: + undici: '*' + dependencies: + undici: 5.22.1 + dev: false + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true @@ -8150,6 +8183,12 @@ packages: engines: {node: '>= 12.13.0'} dev: false + /receptacle@1.3.2: + resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} + dependencies: + ms: 2.1.3 + dev: false + /regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} @@ -8708,6 +8747,11 @@ packages: readable-stream: 2.3.8 dev: true + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + /strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -8964,6 +9008,11 @@ packages: process: 0.11.10 dev: true + /tiny-git-rev-sync@0.1.0: + resolution: {integrity: sha512-3W7aMA9qkrzjREbzGTv/kCNtrx9igZ0ws6LVf09rs668ZYYi8ov7ekU+Rxej14A5m9T9fTBWotwZpGrK9iQJ4g==} + engines: {node: '>=14.6.0'} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -9185,6 +9234,13 @@ packages: xtend: 4.0.2 dev: true + /undici@5.22.1: + resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + engines: {node: '>=14.0'} + dependencies: + busboy: 1.6.0 + dev: false + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'}