diff --git a/.github/.well-known/funding.json b/.github/.well-known/funding.json index 653ce4acf..1b1c2c82e 100644 --- a/.github/.well-known/funding.json +++ b/.github/.well-known/funding.json @@ -20,8 +20,8 @@ "url": "https://rxresu.me" }, "repositoryUrl": { - "url": "https://github.com/amruthpillai/reactive-resume", - "wellKnown": "https://github.com/amruthpillai/reactive-resume/blob/main/.github/.well-known/funding-manifest-urls" + "url": "https://github.com/reactive-resume/app", + "wellKnown": "https://github.com/reactive-resume/app/blob/main/.github/.well-known/funding-manifest-urls" }, "licenses": ["spdx:MIT"], "tags": ["data", "design", "productivity", "resume-builder"] diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 14150b500..862552ba2 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: false contact_links: - name: Questions and support - url: https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a + url: https://github.com/reactive-resume/app/discussions/categories/q-a about: Get help with setup, configuration, and using Reactive Resume. - name: Security vulnerability - url: https://github.com/amruthpillai/reactive-resume/security/advisories/new + url: https://github.com/reactive-resume/app/security/advisories/new about: Report security vulnerabilities privately. diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 622c2f7c9..e9ea477b9 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -2,6 +2,11 @@ name: Build Docker Image on: workflow_dispatch: + inputs: + release: + description: Publish release aliases and redeploy production (false runs a cache-only build, then publishes a canary) + type: boolean + default: false push: branches: - main @@ -13,7 +18,8 @@ concurrency: cancel-in-progress: true env: - IMAGE: ${{ github.repository }} + GHCR_IMAGE: ghcr.io/${{ github.repository }} + DOCKER_IMAGE: docker.io/amruthpillai/reactive-resume FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: @@ -23,20 +29,28 @@ jobs: outputs: nightly: ${{ steps.mode.outputs.nightly }} release: ${{ steps.mode.outputs.release }} - matrix: ${{ steps.mode.outputs.matrix }} + canary: ${{ steps.mode.outputs.canary }} steps: - name: Determine publishing mode id: mode + env: + EVENT_NAME: ${{ github.event_name }} + GIT_REF: ${{ github.ref }} + RELEASE: ${{ inputs.release }} run: | - if [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" == "refs/heads/main" ]]; then + if [[ "$EVENT_NAME" == "push" && "$GIT_REF" == "refs/heads/main" ]]; then echo "nightly=true" >> "$GITHUB_OUTPUT" echo "release=false" >> "$GITHUB_OUTPUT" - echo 'matrix={"include":[{"platform":"linux/amd64","runner":"ubuntu-latest","arch":"amd64"}]}' >> "$GITHUB_OUTPUT" + echo "canary=false" >> "$GITHUB_OUTPUT" + elif [[ "$EVENT_NAME" == "workflow_dispatch" && "$RELEASE" != "true" ]]; then + echo "nightly=false" >> "$GITHUB_OUTPUT" + echo "release=false" >> "$GITHUB_OUTPUT" + echo "canary=true" >> "$GITHUB_OUTPUT" else echo "nightly=false" >> "$GITHUB_OUTPUT" echo "release=true" >> "$GITHUB_OUTPUT" - echo 'matrix={"include":[{"platform":"linux/amd64","runner":"ubuntu-latest","arch":"amd64"},{"platform":"linux/arm64","runner":"ubuntu-24.04-arm","arch":"arm64"}]}' >> "$GITHUB_OUTPUT" + echo "canary=false" >> "$GITHUB_OUTPUT" fi build: @@ -66,8 +80,10 @@ jobs: - name: Checkout Repository uses: actions/checkout@v6 - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v4 + - name: Setup Blacksmith Docker Builder + uses: useblacksmith/setup-docker-builder@v2 + with: + cache-key: Dockerfile-${{ matrix.arch }} - name: Login to Docker Hub uses: docker/login-action@v4 @@ -87,14 +103,22 @@ jobs: uses: docker/metadata-action@v6 with: images: | - ghcr.io/${{ env.IMAGE }} - docker.io/${{ env.IMAGE }} + ${{ env.GHCR_IMAGE }} + ${{ env.DOCKER_IMAGE }} tags: | type=sha,prefix=sha-,suffix=-${{ matrix.arch }} + - name: Cache-only smoke build + if: ${{ needs.mode.outputs.canary == 'true' }} + uses: useblacksmith/build-push-action@v2 + with: + context: . + platforms: ${{ matrix.platform }} + outputs: type=cacheonly + - name: Build and Push by Digest id: build - uses: docker/build-push-action@v7 + uses: useblacksmith/build-push-action@v2 with: context: . sbom: true @@ -104,8 +128,6 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} - cache-from: type=gha,scope=${{ env.IMAGE }}-${{ matrix.arch }} - cache-to: type=gha,mode=max,scope=${{ env.IMAGE }}-${{ matrix.arch }} - name: Export digest run: | @@ -183,10 +205,11 @@ jobs: uses: docker/metadata-action@v6 with: images: | - ghcr.io/${{ env.IMAGE }} - docker.io/${{ env.IMAGE }} + ${{ env.GHCR_IMAGE }} + ${{ env.DOCKER_IMAGE }} tags: | type=sha,prefix=sha- + type=raw,value=canary-${{ github.run_id }}-${{ github.run_attempt }},enable=${{ needs.mode.outputs.canary == 'true' }} type=raw,value=nightly,enable=${{ needs.mode.outputs.nightly == 'true' }} type=raw,value=nightly-{{date 'YYYYMMDDHHmmss' tz='UTC'}},enable=${{ needs.mode.outputs.nightly == 'true' }} type=raw,value=latest,enable=${{ needs.mode.outputs.release == 'true' }} @@ -202,6 +225,8 @@ jobs: if [[ "${{ needs.mode.outputs.nightly }}" == "true" ]]; then FINAL_TAG="nightly" + elif [[ "${{ needs.mode.outputs.canary }}" == "true" ]]; then + FINAL_TAG="canary-${{ github.run_id }}-${{ github.run_attempt }}" else FINAL_TAG="v${{ steps.version.outputs.version }}" fi @@ -214,14 +239,13 @@ jobs: --annotation "index:org.opencontainers.image.vendor=Amruth Pillai" \ --annotation "index:org.opencontainers.image.url=https://rxresu.me" \ --annotation "index:org.opencontainers.image.documentation=https://docs.rxresu.me" \ - --annotation "index:org.opencontainers.image.source=https://github.com/amruthpillai/reactive-resume" \ + --annotation "index:org.opencontainers.image.source=https://github.com/${{ github.repository }}" \ --annotation "index:org.opencontainers.image.version=${{ steps.version.outputs.version }}" \ - $(printf 'ghcr.io/${{ env.IMAGE }}@sha256:%s ' *) \ - $(printf 'docker.io/${{ env.IMAGE }}@sha256:%s ' *) + $(printf '${{ env.GHCR_IMAGE }}@sha256:%s ' *) # Get the digest of the multi-arch manifest - GHCR_DIGEST=$(docker buildx imagetools inspect ghcr.io/${{ env.IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"') - DOCKER_DIGEST=$(docker buildx imagetools inspect docker.io/${{ env.IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"') + GHCR_DIGEST=$(docker buildx imagetools inspect ${{ env.GHCR_IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"') + DOCKER_DIGEST=$(docker buildx imagetools inspect ${{ env.DOCKER_IMAGE }}:${FINAL_TAG} --format '{{json .Manifest.Digest}}' | tr -d '"') echo "final_tag=$FINAL_TAG" >> "$GITHUB_OUTPUT" echo "ghcr_digest=$GHCR_DIGEST" >> "$GITHUB_OUTPUT" echo "docker_digest=$DOCKER_DIGEST" >> "$GITHUB_OUTPUT" @@ -232,15 +256,15 @@ jobs: - name: Sign images with Cosign run: | # Sign GHCR image - cosign sign --yes ghcr.io/${{ env.IMAGE }}@${{ steps.manifest.outputs.ghcr_digest }} + cosign sign --yes ${{ env.GHCR_IMAGE }}@${{ steps.manifest.outputs.ghcr_digest }} # Sign Docker Hub image - cosign sign --yes docker.io/${{ env.IMAGE }}@${{ steps.manifest.outputs.docker_digest }} + cosign sign --yes ${{ env.DOCKER_IMAGE }}@${{ steps.manifest.outputs.docker_digest }} - name: Inspect image run: | - docker buildx imagetools inspect ghcr.io/${{ env.IMAGE }}:${{ steps.manifest.outputs.final_tag }} - docker buildx imagetools inspect docker.io/${{ env.IMAGE }}:${{ steps.manifest.outputs.final_tag }} + docker buildx imagetools inspect ${{ env.GHCR_IMAGE }}:${{ steps.manifest.outputs.final_tag }} + docker buildx imagetools inspect ${{ env.DOCKER_IMAGE }}:${{ steps.manifest.outputs.final_tag }} - name: Redeploy Stack if: ${{ needs.mode.outputs.release == 'true' }} diff --git a/AGENTS.md b/AGENTS.md index ef79a60eb..11e1882fb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -31,7 +31,7 @@ Boundaries: code/commits/PRs written normal. ## Agent skills -- Issues and specs: GitHub Issues for `amruthpillai/reactive-resume`. See `docs/agents/issue-tracker.md`. +- Issues and specs: GitHub Issues for `reactive-resume/app`. See `docs/agents/issue-tracker.md`. - Domain docs use a multi-context layout. See `docs/agents/domain.md`. ## Overview diff --git a/Dockerfile b/Dockerfile index 27b894498..b99e6f022 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,7 +48,7 @@ LABEL org.opencontainers.image.description="A free and open-source resume builde LABEL org.opencontainers.image.vendor="Amruth Pillai" LABEL org.opencontainers.image.url="https://rxresu.me" LABEL org.opencontainers.image.documentation="https://docs.rxresu.me" -LABEL org.opencontainers.image.source="https://github.com/amruthpillai/reactive-resume" +LABEL org.opencontainers.image.source="https://github.com/reactive-resume/app" ENV NODE_ENV="production" \ PORT=3000 \ diff --git a/README.md b/README.md index b46fd6c68..b51951bfb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ > [!IMPORTANT] -> **Repository migration planned:** Reactive Resume is moving from `amruthpillai/reactive-resume` to **`reactive-resume/app`** on GitHub. +> **Repository moved:** Reactive Resume now lives at **[`reactive-resume/app`](https://github.com/reactive-resume/app)** on GitHub. > **Docker Hub stays at `amruthpillai/reactive-resume`.** The new GitHub Container Registry image will be `ghcr.io/reactive-resume/app`. -> Keep your current image configuration until availability is confirmed in the [pinned migration announcement](https://github.com/amruthpillai/reactive-resume/issues/3503). +> Keep your current image configuration until availability is confirmed in the [pinned migration announcement](https://github.com/reactive-resume/app/issues/3503). > GitHub Sponsors and Open Collective funding links remain unchanged.
-
-
-
+
+
+
@@ -149,7 +149,7 @@ The quickest way to run Reactive Resume locally:
```bash
# Clone the repository
-git clone --depth=1 https://github.com/amruthpillai/reactive-resume.git
+git clone --depth=1 https://github.com/reactive-resume/app.git reactive-resume
cd reactive-resume
# Start all services
@@ -225,17 +225,17 @@ Other ways to support:
- Star this repository
- Report reproducible bugs and suggest actionable features
-- Help other users in [GitHub Discussions](https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a)
+- Help other users in [GitHub Discussions](https://github.com/reactive-resume/app/discussions/categories/q-a)
- Improve documentation
- Help with translations
## Star History
-
+
+