diff --git a/.github/workflows/frontend-build.yml b/.github/workflows/frontend-build.yml index f98ba367..ae8651a9 100644 --- a/.github/workflows/frontend-build.yml +++ b/.github/workflows/frontend-build.yml @@ -53,22 +53,30 @@ jobs: uses: actions/upload-artifact@v4 with: name: web-main-js - path: frontend/static/frontend/main.js - - name: 'Archive Web Basic SelfhostedBuild Results' + path: | + frontend/static/frontend/*main.js + frontend/static/frontend/*.wasm + - name: 'Archive Web Basic Selfhosted Build Results' uses: actions/upload-artifact@v4 with: name: web-basic-selfhosted-js - path: frontend/static/frontend/basic.selfhosted.js + path: | + frontend/static/frontend/*basic.selfhosted.js + frontend/static/frontend/*.wasm - name: 'Archive Web PRO Build Results' uses: actions/upload-artifact@v4 with: name: web-pro-js - path: frontend/static/frontend/pro.js + path: | + frontend/static/frontend/*pro.js + frontend/static/frontend/*.wasm - name: 'Archive Web PRO SelhostedBuild Results' uses: actions/upload-artifact@v4 with: name: web-pro-selfhosted-js - path: frontend/static/frontend/pro.selfhosted.js + path: | + frontend/static/frontend/*pro.selfhosted.js + frontend/static/frontend/*.wasm - name: 'Archive Mobile Build Results' uses: actions/upload-artifact@v4 with: @@ -83,9 +91,15 @@ jobs: with: workflow: 'Docker: Coordinator' token: ${{ secrets.PERSONAL_TOKEN }} - - name: 'Invoke Client App Build CI/CD workflow' + - name: 'Invoke Selfhosted Client App Build CI/CD workflow' if: inputs.semver == '' uses: benc-uk/workflow-dispatch@v121 with: - workflow: 'Docker: Client' + workflow: 'Docker: Selfhosted Client' + token: ${{ secrets.PERSONAL_TOKEN }} + - name: 'Invoke Web Client App Build CI/CD workflow' + if: inputs.semver == '' + uses: benc-uk/workflow-dispatch@v121 + with: + workflow: 'Docker: Web Client' token: ${{ secrets.PERSONAL_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/js-linter.yml b/.github/workflows/js-linter.yml index c93eba1d..f8d67372 100644 --- a/.github/workflows/js-linter.yml +++ b/.github/workflows/js-linter.yml @@ -8,7 +8,7 @@ on: - main paths: - frontend - pull_request: + pull_request_target: branches: - main paths: @@ -41,7 +41,5 @@ jobs: with: prettier: true prettier_dir: frontend - - ## Disabled due to error - # eslint: true - # eslint_dir: frontend \ No newline at end of file + eslint: true + eslint_dir: frontend \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6b58063a..f0394d71 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,8 +55,15 @@ jobs: with: semver: ${{ needs.check-versions.outputs.semver }} - client-image: - uses: RoboSats/robosats/.github/workflows/client-image.yml@main + selfhosted-client-image: + uses: RoboSats/robosats/.github/workflows/selfhosted-client-image.yml@main + needs: frontend-build + secrets: inherit + with: + semver: ${{ needs.check-versions.outputs.semver }} + + web-client-image: + uses: RoboSats/robosats/.github/workflows/web-client-image.yml@main needs: frontend-build secrets: inherit with: diff --git a/.github/workflows/client-image.yml b/.github/workflows/selfhosted-client-image.yml similarity index 98% rename from .github/workflows/client-image.yml rename to .github/workflows/selfhosted-client-image.yml index 1f0f6376..3d62869e 100644 --- a/.github/workflows/client-image.yml +++ b/.github/workflows/selfhosted-client-image.yml @@ -1,4 +1,4 @@ -name: "Docker: Client" +name: 'Docker: Selfhosted Client' on: workflow_dispatch: diff --git a/.github/workflows/web-client-image.yml b/.github/workflows/web-client-image.yml new file mode 100644 index 00000000..1ac04d0b --- /dev/null +++ b/.github/workflows/web-client-image.yml @@ -0,0 +1,94 @@ +name: 'Docker: Web Client' + +on: + workflow_dispatch: + workflow_call: + inputs: + semver: + required: true + type: string + push: + branches: [ "main" ] + paths: ["frontend", "web"] + pull_request: + branches: [ "main" ] + paths: ["frontend", "web"] + +jobs: + push_to_registry: + name: 'Push Docker image to Docker Hub' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: 'Copy Static' # Needed since Github actions does not support symlinks + run: cp -r frontend/static web/static + + - name: 'Download main.js Artifact' + if: inputs.semver == '' # Only if workflow fired from frontend-build.yml + uses: dawidd6/action-download-artifact@v3 + with: + workflow: frontend-build.yml + workflow_conclusion: success + name: web-main-js + path: nodeapp/static/frontend/ + + - name: 'Download main.js Artifact for a release' + if: inputs.semver != '' # Only if fired as job in release.yml + uses: actions/download-artifact@v4 + with: + name: web-main-js + path: nodeapp/static/frontend/ + + - name: 'Download pro.js Artifact' + if: inputs.semver == '' # Only if workflow fired from frontend-build.yml + uses: dawidd6/action-download-artifact@v3 + with: + workflow: frontend-build.yml + workflow_conclusion: success + name: web-pro-js + path: nodeapp/static/frontend/ + + - name: 'Download pro.js Artifact for a release' + if: inputs.semver != '' # Only if fired as job in release.yml + uses: actions/download-artifact@v4 + with: + name: web-pro-js + path: nodeapp/static/frontend/ + + - name: 'Log in to Docker Hub' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: 'Extract metadata (tags, labels) for Docker' + id: meta + uses: docker/metadata-action@v5 + with: + images: recksato/robosats-web + tags: | + type=ref,event=pr + type=ref,event=tag + type=semver,pattern={{major}}.{{minor}} + type=sha,enable=true,priority=100,prefix=,suffix=,format=short + type=raw,value=latest + + - name: 'Get Commit Hash' + id: commit + uses: pr-mpt/actions-commit-hash@v3 + + - name: 'Set up QEMU' + uses: docker/setup-qemu-action@v3 + + - name: 'Set up Docker Buildx' + uses: docker/setup-buildx-action@v3 + + - name: 'Build and push Docker image' + uses: docker/build-push-action@v5 + with: + context: ./nodeapp + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 00000000..81ca8443 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,24 @@ +FROM alpine:3.18.0 + +LABEL maintainer="Reckless_Satoshi https://github.com/reckless-satoshi" + +# Needs a copy or symlink of /frontend/static in /nodeapp/static +# Github client release workflow copies /frontend/static here + +RUN mkdir -p /usr/src/robosats +WORKDIR /usr/src/robosats + +RUN set -x \ + && addgroup -g 101 -S nginx \ + && adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx + +COPY . . +COPY ./nginx.conf /etc/nginx/nginx.conf + +RUN apk -U --no-cache upgrade \ + && apk --no-cache add nginx + +EXPOSE 80 +HEALTHCHECK CMD curl --fail http://localhost:80 || exit 1 + +CMD ["sh", "run.sh"] \ No newline at end of file diff --git a/web/basic.html b/web/basic.html new file mode 100644 index 00000000..99baef71 --- /dev/null +++ b/web/basic.html @@ -0,0 +1,60 @@ + + +
+ + + + + + + + + + +