Skip to content
Merged
50 changes: 47 additions & 3 deletions .github/workflows/docker-latest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,20 @@ jobs:
run: npm run build
working-directory: frontend

- name: Extract version from tag
id: extract_version
run: |
if [ "${{ github.event_name }}" = "release" ]; then
VERSION=${{ github.event.release.tag_name }}
# Remove 'v' prefix if present
VERSION=${VERSION#v}
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "is_release=true" >> $GITHUB_OUTPUT
else
echo "version=latest" >> $GITHUB_OUTPUT
echo "is_release=false" >> $GITHUB_OUTPUT
fi

- name: Log in to Docker Hub
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
with:
Expand All @@ -41,10 +55,40 @@ jobs:
run: docker buildx create --name nevuBuilder --use

- name: Build and push the amd64 image
run: docker buildx build --platform linux/amd64 -t ipmake/nevu:latest-amd64 . --push
run: |
if [ "${{ steps.extract_version.outputs.is_release }}" = "true" ]; then
docker buildx build --platform linux/amd64 \
-t ipmake/nevu:latest-amd64 \
-t ipmake/nevu:${{ steps.extract_version.outputs.version }}-amd64 \
. --push
else
docker buildx build --platform linux/amd64 -t ipmake/nevu:latest-amd64 . --push
fi

- name: Build and push the arm64 image
run: docker buildx build --platform linux/arm64 -t ipmake/nevu:latest-arm64 . --push
run: |
if [ "${{ steps.extract_version.outputs.is_release }}" = "true" ]; then
docker buildx build --platform linux/arm64 \
-t ipmake/nevu:latest-arm64 \
-t ipmake/nevu:${{ steps.extract_version.outputs.version }}-arm64 \
. --push
else
docker buildx build --platform linux/arm64 -t ipmake/nevu:latest-arm64 . --push
fi

- name: Build and push multi-platform Docker image
run: docker buildx imagetools create --tag ipmake/nevu:latest ipmake/nevu:latest-amd64 ipmake/nevu:latest-arm64
run: |
if [ "${{ steps.extract_version.outputs.is_release }}" = "true" ]; then
# Create versioned multi-platform image
docker buildx imagetools create \
--tag ipmake/nevu:${{ steps.extract_version.outputs.version }} \
ipmake/nevu:${{ steps.extract_version.outputs.version }}-amd64 \
ipmake/nevu:${{ steps.extract_version.outputs.version }}-arm64
# Create latest multi-platform image
docker buildx imagetools create \
--tag ipmake/nevu:latest \
ipmake/nevu:latest-amd64 \
ipmake/nevu:latest-arm64
else
docker buildx imagetools create --tag ipmake/nevu:latest ipmake/nevu:latest-amd64 ipmake/nevu:latest-arm64
fi
29 changes: 18 additions & 11 deletions backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ discovery.announce("Nevu", {
const proxy = httpProxy.createProxyServer({
ws: true,
autoRewrite: false,
cookieDomainRewrite: (new URL(process.env.PLEX_SERVER as string)).hostname,
cookieDomainRewrite: (new URL(process.env.PLEX_SERVER || "http://localhost:32400")).hostname,
changeOrigin: true,
secure: false,
followRedirects: true,
Expand Down Expand Up @@ -109,16 +109,23 @@ const noVerifyHttpsAgent = new https.Agent({
}

// check whether the PLEX_SERVER is reachable
try {
await axios.get(`${process.env.PLEX_SERVER}/identity`, {
timeout: 5000,
});
} catch (error) {
status.error = true;
status.message = 'Proxy cannot reach PLEX_SERVER';
console.error('Proxy cannot reach PLEX_SERVER');
return;
}
await new Promise<void>(async (resolve) => {
while (true) {
const r = await axios.get(`${process.env.PLEX_SERVER ?? "http://localhost:32400"}/identity`, {
timeout: 5000,
}).catch(() => null);

if (r && r.status === 200) {
status.error = false;
return resolve();
} else {
status.error = true;
status.message = 'Proxy cannot reach PLEX_SERVER';
console.error('Proxy cannot reach PLEX_SERVER');
await new Promise(r => setTimeout(r, 3000));
}
}
})
}


Expand Down
Loading