mirror of
https://github.com/ManInDark/HabitTrove.git
synced 2026-01-20 22:24:28 +01:00
Added github actions (#7)
* Added github actions * added deploy-demo step * Updated README * test out deploy-demo * finalize
This commit is contained in:
71
.github/workflows/docker-publish.yml
vendored
Normal file
71
.github/workflows/docker-publish.yml
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
name: Docker Build and Publish
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
# - github-actions
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
EXISTS: ${{ steps.check-version.outputs.EXISTS }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Get version from package.json
|
||||||
|
id: package-version
|
||||||
|
run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Check if version exists
|
||||||
|
id: check-version
|
||||||
|
run: |
|
||||||
|
if docker pull dohsimpson/habittrove:v${{ steps.package-version.outputs.VERSION }} 2>/dev/null; then
|
||||||
|
echo "EXISTS=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "EXISTS=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
run: docker build -t habittrove .
|
||||||
|
|
||||||
|
- name: Push Docker images
|
||||||
|
run: |
|
||||||
|
if [ "${{ steps.check-version.outputs.EXISTS }}" = "false" ]; then
|
||||||
|
docker tag habittrove dohsimpson/habittrove:v${{ steps.package-version.outputs.VERSION }}
|
||||||
|
docker push dohsimpson/habittrove:v${{ steps.package-version.outputs.VERSION }}
|
||||||
|
echo "Pushed tag: v${{ steps.package-version.outputs.VERSION }}"
|
||||||
|
docker tag habittrove dohsimpson/habittrove:latest
|
||||||
|
docker push dohsimpson/habittrove:latest
|
||||||
|
echo "Pushed tag: latest"
|
||||||
|
fi
|
||||||
|
docker tag habittrove dohsimpson/habittrove:dev
|
||||||
|
docker push dohsimpson/habittrove:dev
|
||||||
|
echo "Pushed tag: dev"
|
||||||
|
|
||||||
|
deploy-demo:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build-and-push
|
||||||
|
# demo tracks the latest tag
|
||||||
|
if: needs.build-and-push.outputs.EXISTS == 'false'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-hub/kubectl@master
|
||||||
|
env:
|
||||||
|
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
|
||||||
|
with:
|
||||||
|
args: rollout restart -n ${{ secrets.KUBE_NAMESPACE }} deploy/${{ secrets.KUBE_DEPLOYMENT }}
|
||||||
43
README.md
43
README.md
@@ -60,16 +60,55 @@ npm run dev
|
|||||||
|
|
||||||
## Docker Deployment
|
## Docker Deployment
|
||||||
|
|
||||||
For production deployment, you can use Docker. The application data will be persisted in the `data` directory.
|
HabitTrove can be run using Docker in several ways, depending on your needs:
|
||||||
|
|
||||||
|
### Using Pre-built Images
|
||||||
|
|
||||||
|
The easiest way to run HabitTrove is using our pre-built Docker images from DockerHub:
|
||||||
|
|
||||||
|
1. First, prepare the data directory with correct permissions:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p data
|
||||||
|
chown -R 1001:1001 data # Required for the nextjs user in container
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Then run using either method:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using docker-compose (recommended)
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Or using docker run directly
|
||||||
|
docker run -d -p 3000:3000 -v ./data:/app/data dohsimpson/habittrove
|
||||||
|
```
|
||||||
|
|
||||||
|
Available image tags:
|
||||||
|
|
||||||
|
- `latest`: Stable release version, recommended for most users
|
||||||
|
- `vX.Y.Z` (e.g., `v0.1.4`): Specific version for reproducible deployments and rollbacks
|
||||||
|
- `dev`: Latest development build from the main branch, may contain unstable features
|
||||||
|
|
||||||
|
Choose your tag based on needs:
|
||||||
|
|
||||||
|
- Use `latest` for general production use
|
||||||
|
- Use version tags (e.g., `v0.1.4`) for reproducible deployments
|
||||||
|
- Use `dev` for testing new features
|
||||||
|
|
||||||
|
### Building Locally
|
||||||
|
|
||||||
|
If you want to build the image locally (useful for development):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build the Docker image
|
# Build the Docker image
|
||||||
npm run docker-build
|
npm run docker-build
|
||||||
|
|
||||||
# Run the Docker container
|
# Run the container
|
||||||
npm run docker-run
|
npm run docker-run
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The application data will be persisted in the `data` directory in both cases.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Contributions are welcome! We appreciate both:
|
Contributions are welcome! We appreciate both:
|
||||||
|
|||||||
Reference in New Issue
Block a user