From 283ce5cb1f68e402ead3a38c193dbed354f689ea Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Fri, 23 Oct 2026 22:22:32 +0200 Subject: [PATCH] fix(service): update reactive-resume template to v6 Drop chrome, minio, and redis, which v6 no longer uses. Switch to the v6 variables (APP_URL, AUTH_SECRET, ENCRYPTION_SECRET, FLAG_*), store uploads in a volume at /app/data, use Postgres 18, and check /api/health. Closes #12282 Co-Authored-By: Claude Opus 5.5 --- templates/compose/reactive-resume.yaml | 98 ++++++------------------- templates/service-templates-latest.json | 14 ++-- templates/service-templates.json | 14 ++-- 3 files changed, 36 insertions(+), 90 deletions(-) diff --git a/templates/compose/reactive-resume.yaml b/templates/compose/reactive-resume.yaml index 0ecf593dba..18403477f7 100644 --- a/templates/compose/reactive-resume.yaml +++ b/templates/compose/reactive-resume.yaml @@ -1,4 +1,4 @@ -# documentation: https://rxresu.me/ +# documentation: https://docs.rxresu.me/self-hosting/docker # slogan: A one-of-a-kind resume builder that keeps your privacy in mind. # category: productivity # tags: reactive-resume,resume-builder,open-source,2fa @@ -7,95 +7,41 @@ services: reactive-resume: - image: amruthpillai/reactive-resume:v4.3.7 + image: amruthpillai/reactive-resume:v6 environment: - SERVICE_URL_REACTIVERESUME_3000 - - PUBLIC_URL=$SERVICE_URL_REACTIVERESUME - - 'STORAGE_URL=${SERVICE_URL_MINIO}/default' - - DATABASE_URL=postgresql://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgres:5432/${POSTGRES_DB:-postgres} - - ACCESS_TOKEN_SECRET=$SERVICE_PASSWORD_ACCESSTOKEN - - REFRESH_TOKEN_SECRET=$SERVICE_PASSWORD_REFRESHTOKEN - - CHROME_TOKEN=$SERVICE_PASSWORD_CHROMETOKEN - - CHROME_URL=ws://chrome:3000/chrome - - REDIS_URL=redis://redis:6379 - - STORAGE_ENDPOINT=minio - - STORAGE_PORT=9000 - - STORAGE_REGION=us-east-1 - - STORAGE_BUCKET=default - - STORAGE_ACCESS_KEY=$SERVICE_USER_MINIO - - STORAGE_SECRET_KEY=$SERVICE_PASSWORD_MINIO - - STORAGE_USE_SSL=false - - 'DISABLE_SIGNUPS=${SERVICE_DISABLE_SIGNUPS:-false}' - - 'DISABLE_EMAIL_AUTH=${SERVICE_DISABLE_EMAIL_AUTH:-false}' + - APP_URL=${SERVICE_URL_REACTIVERESUME} + - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-reactive_resume} + - AUTH_SECRET=${SERVICE_PASSWORD_64_AUTHSECRET} + - ENCRYPTION_SECRET=${SERVICE_PASSWORD_64_ENCRYPTIONSECRET} + - FLAG_DISABLE_SIGNUPS=${FLAG_DISABLE_SIGNUPS:-false} + - FLAG_DISABLE_EMAIL_AUTH=${FLAG_DISABLE_EMAIL_AUTH:-false} + volumes: + - reactive-resume-data:/app/data depends_on: - - postgres - - minio - - chrome + postgres: + condition: service_healthy healthcheck: test: - CMD - node - '-e' - - "require('http').get('http://127.0.0.1:3000', res => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))" + - "fetch('http://127.0.0.1:3000/api/health').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))" interval: 10s - timeout: 3s - retries: 5 - start_period: 10s + timeout: 5s + retries: 10 + start_period: 30s + postgres: - image: postgres:16-alpine + image: postgres:18-alpine environment: - - POSTGRES_DB=${POSTGRES_DB:-postgres} - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-reactive_resume} + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} volumes: - - postgres-data:/var/lib/postgresql/data + - postgres-data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 - - minio: - image: pgsty/silo:RELEASE.2026-10-15T00-00-00Z # Released on 15 October 2026 - command: server /data --console-address ":9001" - environment: - - MINIO_SERVER_URL=$MINIO_SERVER_URL - - MINIO_BROWSER_REDIRECT_URL=$MINIO_BROWSER_REDIRECT_URL - - MINIO_ROOT_USER=$SERVICE_USER_MINIO - - MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO - volumes: - - minio-data:/data - healthcheck: - test: ["CMD", "mc", "ready", "local"] - interval: 5s - timeout: 20s - retries: 10 - - chrome: - image: ghcr.io/browserless/chrome:latest - platform: linux/amd64 - environment: - - HEALTH=true - - TIMEOUT=10000 - - CONCURRENT=10 - - TOKEN=$SERVICE_PASSWORD_CHROMETOKEN - healthcheck: - test: - - CMD - - curl - - '-f' - - 'http://127.0.0.1:3000/' - interval: 10s - timeout: 3s - retries: 5 - - redis: - image: redis:7-alpine - command: redis-server - volumes: - - redis_data:/data - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 5s - timeout: 20s - retries: 10 diff --git a/templates/service-templates-latest.json b/templates/service-templates-latest.json index a688b42992..14733431ae 100644 --- a/templates/service-templates-latest.json +++ b/templates/service-templates-latest.json @@ -367,7 +367,7 @@ "category": "cms", "logo": "svgs/bookstack.png", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "browserless": { @@ -812,7 +812,7 @@ "category": "cms", "logo": "svgs/cockpit.svg", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "code-server": { @@ -1132,7 +1132,7 @@ "category": "productivity", "logo": "svgs/dolibarr.png", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "dozzle-with-auth": { @@ -2869,7 +2869,7 @@ "category": "productivity", "logo": "svgs/kimai.svg", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "8001" }, "kuzzle": { @@ -3494,7 +3494,7 @@ "category": "analytics", "logo": "svgs/mixpost.svg", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "mosquitto": { @@ -4723,9 +4723,9 @@ "port": "3000" }, "reactive-resume": { - "documentation": "https://rxresu.me/?utm_source=coolify.io", + "documentation": "https://docs.rxresu.me/self-hosting/docker?utm_source=coolify.io", "slogan": "A one-of-a-kind resume builder that keeps your privacy in mind.", - "compose": "c2VydmljZXM6CiAgcmVhY3RpdmUtcmVzdW1lOgogICAgaW1hZ2U6ICdhbXJ1dGhwaWxsYWkvcmVhY3RpdmUtcmVzdW1lOnY0LjMuNycKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX1JFQUNUSVZFUkVTVU1FXzMwMDAKICAgICAgLSBQVUJMSUNfVVJMPSRTRVJWSUNFX1VSTF9SRUFDVElWRVJFU1VNRQogICAgICAtICdTVE9SQUdFX1VSTD0ke1NFUlZJQ0VfVVJMX01JTklPfS9kZWZhdWx0JwogICAgICAtICdEQVRBQkFTRV9VUkw9cG9zdGdyZXNxbDovLyRTRVJWSUNFX1VTRVJfUE9TVEdSRVM6JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNAcG9zdGdyZXM6NTQzMi8ke1BPU1RHUkVTX0RCOi1wb3N0Z3Jlc30nCiAgICAgIC0gQUNDRVNTX1RPS0VOX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF9BQ0NFU1NUT0tFTgogICAgICAtIFJFRlJFU0hfVE9LRU5fU0VDUkVUPSRTRVJWSUNFX1BBU1NXT1JEX1JFRlJFU0hUT0tFTgogICAgICAtIENIUk9NRV9UT0tFTj0kU0VSVklDRV9QQVNTV09SRF9DSFJPTUVUT0tFTgogICAgICAtICdDSFJPTUVfVVJMPXdzOi8vY2hyb21lOjMwMDAvY2hyb21lJwogICAgICAtICdSRURJU19VUkw9cmVkaXM6Ly9yZWRpczo2Mzc5JwogICAgICAtIFNUT1JBR0VfRU5EUE9JTlQ9bWluaW8KICAgICAgLSBTVE9SQUdFX1BPUlQ9OTAwMAogICAgICAtIFNUT1JBR0VfUkVHSU9OPXVzLWVhc3QtMQogICAgICAtIFNUT1JBR0VfQlVDS0VUPWRlZmF1bHQKICAgICAgLSBTVE9SQUdFX0FDQ0VTU19LRVk9JFNFUlZJQ0VfVVNFUl9NSU5JTwogICAgICAtIFNUT1JBR0VfU0VDUkVUX0tFWT0kU0VSVklDRV9QQVNTV09SRF9NSU5JTwogICAgICAtIFNUT1JBR0VfVVNFX1NTTD1mYWxzZQogICAgICAtICdESVNBQkxFX1NJR05VUFM9JHtTRVJWSUNFX0RJU0FCTEVfU0lHTlVQUzotZmFsc2V9JwogICAgICAtICdESVNBQkxFX0VNQUlMX0FVVEg9JHtTRVJWSUNFX0RJU0FCTEVfRU1BSUxfQVVUSDotZmFsc2V9JwogICAgZGVwZW5kc19vbjoKICAgICAgLSBwb3N0Z3JlcwogICAgICAtIG1pbmlvCiAgICAgIC0gY2hyb21lCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gbm9kZQogICAgICAgIC0gJy1lJwogICAgICAgIC0gInJlcXVpcmUoJ2h0dHAnKS5nZXQoJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcsIHJlcyA9PiBwcm9jZXNzLmV4aXQocmVzLnN0YXR1c0NvZGUgPT09IDIwMCA/IDAgOiAxKSkub24oJ2Vycm9yJywgKCkgPT4gcHJvY2Vzcy5leGl0KDEpKSIKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzcwogICAgICByZXRyaWVzOiA1CiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1wb3N0Z3Jlc30nCiAgICAgIC0gUE9TVEdSRVNfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIG1pbmlvOgogICAgaW1hZ2U6ICdwZ3N0eS9zaWxvOlJFTEVBU0UuMjAyNi0xMC0xNVQwMC0wMC0wMFonCiAgICBjb21tYW5kOiAnc2VydmVyIC9kYXRhIC0tY29uc29sZS1hZGRyZXNzICI6OTAwMSInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNSU5JT19TRVJWRVJfVVJMPSRNSU5JT19TRVJWRVJfVVJMCiAgICAgIC0gTUlOSU9fQlJPV1NFUl9SRURJUkVDVF9VUkw9JE1JTklPX0JST1dTRVJfUkVESVJFQ1RfVVJMCiAgICAgIC0gTUlOSU9fUk9PVF9VU0VSPSRTRVJWSUNFX1VTRVJfTUlOSU8KICAgICAgLSBNSU5JT19ST09UX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX01JTklPCiAgICB2b2x1bWVzOgogICAgICAtICdtaW5pby1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG1jCiAgICAgICAgLSByZWFkeQogICAgICAgIC0gbG9jYWwKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIGNocm9tZToKICAgIGltYWdlOiAnZ2hjci5pby9icm93c2VybGVzcy9jaHJvbWU6bGF0ZXN0JwogICAgcGxhdGZvcm06IGxpbnV4L2FtZDY0CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBIRUFMVEg9dHJ1ZQogICAgICAtIFRJTUVPVVQ9MTAwMDAKICAgICAgLSBDT05DVVJSRU5UPTEwCiAgICAgIC0gVE9LRU49JFNFUlZJQ0VfUEFTU1dPUkRfQ0hST01FVE9LRU4KICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwLycKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzcwogICAgICByZXRyaWVzOiA1CiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjctYWxwaW5lJwogICAgY29tbWFuZDogcmVkaXMtc2VydmVyCiAgICB2b2x1bWVzOgogICAgICAtICdyZWRpc19kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgcmVhY3RpdmUtcmVzdW1lOgogICAgaW1hZ2U6ICdhbXJ1dGhwaWxsYWkvcmVhY3RpdmUtcmVzdW1lOnY2JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfUkVBQ1RJVkVSRVNVTUVfMzAwMAogICAgICAtICdBUFBfVVJMPSR7U0VSVklDRV9VUkxfUkVBQ1RJVkVSRVNVTUV9JwogICAgICAtICdEQVRBQkFTRV9VUkw9cG9zdGdyZXNxbDovLyR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfToke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzOjU0MzIvJHtQT1NUR1JFU19EQjotcmVhY3RpdmVfcmVzdW1lfScKICAgICAgLSAnQVVUSF9TRUNSRVQ9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0FVVEhTRUNSRVR9JwogICAgICAtICdFTkNSWVBUSU9OX1NFQ1JFVD0ke1NFUlZJQ0VfUEFTU1dPUkRfNjRfRU5DUllQVElPTlNFQ1JFVH0nCiAgICAgIC0gJ0ZMQUdfRElTQUJMRV9TSUdOVVBTPSR7RkxBR19ESVNBQkxFX1NJR05VUFM6LWZhbHNlfScKICAgICAgLSAnRkxBR19ESVNBQkxFX0VNQUlMX0FVVEg9JHtGTEFHX0RJU0FCTEVfRU1BSUxfQVVUSDotZmFsc2V9JwogICAgdm9sdW1lczoKICAgICAgLSAncmVhY3RpdmUtcmVzdW1lLWRhdGE6L2FwcC9kYXRhJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBub2RlCiAgICAgICAgLSAnLWUnCiAgICAgICAgLSAiZmV0Y2goJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMC9hcGkvaGVhbHRoJykudGhlbihyID0+IHByb2Nlc3MuZXhpdChyLm9rID8gMCA6IDEpKS5jYXRjaCgoKSA9PiBwcm9jZXNzLmV4aXQoMSkpIgogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDEwCiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE4LWFscGluZScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1yZWFjdGl2ZV9yZXN1bWV9JwogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbCcKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", "tags": [ "reactive-resume", "resume-builder", diff --git a/templates/service-templates.json b/templates/service-templates.json index e788b80301..ca371b8d4c 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -367,7 +367,7 @@ "category": "cms", "logo": "svgs/bookstack.png", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "browserless": { @@ -812,7 +812,7 @@ "category": "cms", "logo": "svgs/cockpit.svg", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "code-server": { @@ -1132,7 +1132,7 @@ "category": "productivity", "logo": "svgs/dolibarr.png", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "dozzle-with-auth": { @@ -2869,7 +2869,7 @@ "category": "productivity", "logo": "svgs/kimai.svg", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "8001" }, "kuzzle": { @@ -3494,7 +3494,7 @@ "category": "analytics", "logo": "svgs/mixpost.svg", "minversion": "0.0.0", - "template_last_updated_at": "2026-10-22T20:26:09+02:00", + "template_last_updated_at": "2026-10-23T09:53:25+02:00", "port": "80" }, "mosquitto": { @@ -4723,9 +4723,9 @@ "port": "3000" }, "reactive-resume": { - "documentation": "https://rxresu.me/?utm_source=coolify.io", + "documentation": "https://docs.rxresu.me/self-hosting/docker?utm_source=coolify.io", "slogan": "A one-of-a-kind resume builder that keeps your privacy in mind.", - "compose": "c2VydmljZXM6CiAgcmVhY3RpdmUtcmVzdW1lOgogICAgaW1hZ2U6ICdhbXJ1dGhwaWxsYWkvcmVhY3RpdmUtcmVzdW1lOnY0LjMuNycKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9SRUFDVElWRVJFU1VNRV8zMDAwCiAgICAgIC0gUFVCTElDX1VSTD0kU0VSVklDRV9GUUROX1JFQUNUSVZFUkVTVU1FCiAgICAgIC0gJ1NUT1JBR0VfVVJMPSR7U0VSVklDRV9GUUROX01JTklPfS9kZWZhdWx0JwogICAgICAtICdEQVRBQkFTRV9VUkw9cG9zdGdyZXNxbDovLyRTRVJWSUNFX1VTRVJfUE9TVEdSRVM6JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNAcG9zdGdyZXM6NTQzMi8ke1BPU1RHUkVTX0RCOi1wb3N0Z3Jlc30nCiAgICAgIC0gQUNDRVNTX1RPS0VOX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF9BQ0NFU1NUT0tFTgogICAgICAtIFJFRlJFU0hfVE9LRU5fU0VDUkVUPSRTRVJWSUNFX1BBU1NXT1JEX1JFRlJFU0hUT0tFTgogICAgICAtIENIUk9NRV9UT0tFTj0kU0VSVklDRV9QQVNTV09SRF9DSFJPTUVUT0tFTgogICAgICAtICdDSFJPTUVfVVJMPXdzOi8vY2hyb21lOjMwMDAvY2hyb21lJwogICAgICAtICdSRURJU19VUkw9cmVkaXM6Ly9yZWRpczo2Mzc5JwogICAgICAtIFNUT1JBR0VfRU5EUE9JTlQ9bWluaW8KICAgICAgLSBTVE9SQUdFX1BPUlQ9OTAwMAogICAgICAtIFNUT1JBR0VfUkVHSU9OPXVzLWVhc3QtMQogICAgICAtIFNUT1JBR0VfQlVDS0VUPWRlZmF1bHQKICAgICAgLSBTVE9SQUdFX0FDQ0VTU19LRVk9JFNFUlZJQ0VfVVNFUl9NSU5JTwogICAgICAtIFNUT1JBR0VfU0VDUkVUX0tFWT0kU0VSVklDRV9QQVNTV09SRF9NSU5JTwogICAgICAtIFNUT1JBR0VfVVNFX1NTTD1mYWxzZQogICAgICAtICdESVNBQkxFX1NJR05VUFM9JHtTRVJWSUNFX0RJU0FCTEVfU0lHTlVQUzotZmFsc2V9JwogICAgICAtICdESVNBQkxFX0VNQUlMX0FVVEg9JHtTRVJWSUNFX0RJU0FCTEVfRU1BSUxfQVVUSDotZmFsc2V9JwogICAgZGVwZW5kc19vbjoKICAgICAgLSBwb3N0Z3JlcwogICAgICAtIG1pbmlvCiAgICAgIC0gY2hyb21lCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gbm9kZQogICAgICAgIC0gJy1lJwogICAgICAgIC0gInJlcXVpcmUoJ2h0dHAnKS5nZXQoJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcsIHJlcyA9PiBwcm9jZXNzLmV4aXQocmVzLnN0YXR1c0NvZGUgPT09IDIwMCA/IDAgOiAxKSkub24oJ2Vycm9yJywgKCkgPT4gcHJvY2Vzcy5leGl0KDEpKSIKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzcwogICAgICByZXRyaWVzOiA1CiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1wb3N0Z3Jlc30nCiAgICAgIC0gUE9TVEdSRVNfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIG1pbmlvOgogICAgaW1hZ2U6ICdwZ3N0eS9zaWxvOlJFTEVBU0UuMjAyNi0xMC0xNVQwMC0wMC0wMFonCiAgICBjb21tYW5kOiAnc2VydmVyIC9kYXRhIC0tY29uc29sZS1hZGRyZXNzICI6OTAwMSInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNSU5JT19TRVJWRVJfVVJMPSRNSU5JT19TRVJWRVJfVVJMCiAgICAgIC0gTUlOSU9fQlJPV1NFUl9SRURJUkVDVF9VUkw9JE1JTklPX0JST1dTRVJfUkVESVJFQ1RfVVJMCiAgICAgIC0gTUlOSU9fUk9PVF9VU0VSPSRTRVJWSUNFX1VTRVJfTUlOSU8KICAgICAgLSBNSU5JT19ST09UX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX01JTklPCiAgICB2b2x1bWVzOgogICAgICAtICdtaW5pby1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG1jCiAgICAgICAgLSByZWFkeQogICAgICAgIC0gbG9jYWwKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIGNocm9tZToKICAgIGltYWdlOiAnZ2hjci5pby9icm93c2VybGVzcy9jaHJvbWU6bGF0ZXN0JwogICAgcGxhdGZvcm06IGxpbnV4L2FtZDY0CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBIRUFMVEg9dHJ1ZQogICAgICAtIFRJTUVPVVQ9MTAwMDAKICAgICAgLSBDT05DVVJSRU5UPTEwCiAgICAgIC0gVE9LRU49JFNFUlZJQ0VfUEFTU1dPUkRfQ0hST01FVE9LRU4KICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwLycKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzcwogICAgICByZXRyaWVzOiA1CiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjctYWxwaW5lJwogICAgY29tbWFuZDogcmVkaXMtc2VydmVyCiAgICB2b2x1bWVzOgogICAgICAtICdyZWRpc19kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgcmVhY3RpdmUtcmVzdW1lOgogICAgaW1hZ2U6ICdhbXJ1dGhwaWxsYWkvcmVhY3RpdmUtcmVzdW1lOnY2JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1JFQUNUSVZFUkVTVU1FXzMwMDAKICAgICAgLSAnQVBQX1VSTD0ke1NFUlZJQ0VfRlFETl9SRUFDVElWRVJFU1VNRX0nCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD1wb3N0Z3Jlc3FsOi8vJHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9OiR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU31AcG9zdGdyZXM6NTQzMi8ke1BPU1RHUkVTX0RCOi1yZWFjdGl2ZV9yZXN1bWV9JwogICAgICAtICdBVVRIX1NFQ1JFVD0ke1NFUlZJQ0VfUEFTU1dPUkRfNjRfQVVUSFNFQ1JFVH0nCiAgICAgIC0gJ0VOQ1JZUFRJT05fU0VDUkVUPSR7U0VSVklDRV9QQVNTV09SRF82NF9FTkNSWVBUSU9OU0VDUkVUfScKICAgICAgLSAnRkxBR19ESVNBQkxFX1NJR05VUFM9JHtGTEFHX0RJU0FCTEVfU0lHTlVQUzotZmFsc2V9JwogICAgICAtICdGTEFHX0RJU0FCTEVfRU1BSUxfQVVUSD0ke0ZMQUdfRElTQUJMRV9FTUFJTF9BVVRIOi1mYWxzZX0nCiAgICB2b2x1bWVzOgogICAgICAtICdyZWFjdGl2ZS1yZXN1bWUtZGF0YTovYXBwL2RhdGEnCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3JlczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG5vZGUKICAgICAgICAtICctZScKICAgICAgICAtICJmZXRjaCgnaHR0cDovLzEyNy4wLjAuMTozMDAwL2FwaS9oZWFsdGgnKS50aGVuKHIgPT4gcHJvY2Vzcy5leGl0KHIub2sgPyAwIDogMSkpLmNhdGNoKCgpID0+IHByb2Nlc3MuZXhpdCgxKSkiCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAKICAgICAgc3RhcnRfcGVyaW9kOiAzMHMKICBwb3N0Z3JlczoKICAgIGltYWdlOiAncG9zdGdyZXM6MTgtYWxwaW5lJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LXJlYWN0aXZlX3Jlc3VtZX0nCiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXMtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "reactive-resume", "resume-builder",