Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upgrade Go version to 1.23 #861

Merged
merged 2 commits into from
Oct 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ jobs:
- run:
name: Upgrade Go
command: |
wget https://golang.org/dl/go1.22.0.linux-arm64.tar.gz
wget https://golang.org/dl/go1.23.0.linux-arm64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.0.linux-arm64.tar.gz
sudo tar -C /usr/local -xzf go1.23.0.linux-arm64.tar.gz
- restore_cache:
keys:
- go-mod-v4-{{ checksum "go.sum" }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ jobs:
name: build binaries
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.22.x
- name: Set up Go 1.23.x
uses: actions/setup-go@v4
with:
go-version: 1.22.x
go-version: 1.23.x
id: go

- name: Pull source
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/build_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ jobs:
unzip ~/.gorse/download/ml-tag.zip -d ~/.gorse/dataset
unzip ~/.gorse/download/criteo.zip -d ~/.gorse/dataset

- name: Set up Go 1.22.x
- name: Set up Go 1.23.x
uses: actions/setup-go@v4
with:
go-version: 1.22.x
go-version: 1.23.x
id: go

- name: Check out code into the Go module directory
Expand Down Expand Up @@ -126,7 +126,7 @@ jobs:
database=${{ matrix.database }}

- name: Build the stack
run: docker-compose -f client/docker-compose.yml --project-directory . up -d
run: docker compose -f client/docker-compose.yml --project-directory . up -d
env:
DOCKER_BUILDKIT: 1

Expand All @@ -142,10 +142,10 @@ jobs:
# Retry all errors, including 404. This option might trigger curl upgrade.
retry-all: true

- name: Set up Go 1.22.x
- name: Set up Go 1.23.x
uses: actions/setup-go@v4
with:
go-version: 1.22.x
go-version: 1.23.x
id: go

- name: Test
Expand All @@ -172,10 +172,10 @@ jobs:
MYSQL_ROOT_PASSWORD: password

steps:
- name: Set up Go 1.22.x
- name: Set up Go 1.23.x
uses: actions/setup-go@v4
with:
go-version: 1.22.x
go-version: 1.23.x
id: go

- name: Check out code into the Go module directory
Expand All @@ -192,7 +192,7 @@ jobs:
steps:
- uses: actions/setup-go@v4
with:
go-version: 1.22.x
go-version: 1.23.x
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ These following installations are required:
```bash
cd storage

docker-compose up -d
docker compose up -d
```

If you need import sample data, download the SQL file github.sql and import to the MySQL instance.
Expand Down
125 changes: 2 additions & 123 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,123 +1,2 @@
# Gorse Recommender System Engine

<img width=160 src="assets/gorse.png"/>

![](https://img.shields.io/github/go-mod/go-version/zhenghaoz/gorse)
[![build](https://github.com/zhenghaoz/gorse/workflows/build/badge.svg)](https://github.com/zhenghaoz/gorse/actions?query=workflow%3Abuild)
[![codecov](https://codecov.io/gh/gorse-io/gorse/branch/master/graph/badge.svg)](https://codecov.io/gh/gorse-io/gorse)
[![Go Report Card](https://goreportcard.com/badge/github.com/zhenghaoz/gorse)](https://goreportcard.com/report/github.com/zhenghaoz/gorse)
[![GoDoc](https://godoc.org/github.com/zhenghaoz/gorse?status.svg)](https://godoc.org/github.com/zhenghaoz/gorse)
[![Discord](https://img.shields.io/discord/830635934210588743)](https://discord.gg/x6gAtNNkAE)
[![Twitter Follow](https://img.shields.io/twitter/follow/gorse_io?label=Follow&style=social)](https://twitter.com/gorse_io)

Gorse is an open-source recommendation system written in Go. Gorse aims to be a universal open-source recommender system that can be quickly introduced into a wide variety of online services. By importing items, users, and interaction data into Gorse, the system will automatically train models to generate recommendations for each user. Project features are as follows.

<img width=520 src="assets/workflow.png"/>

- **Multi-source:** Recommend items from Popular, latest, user-based, item-based and collaborative filtering.
- **AutoML:** Search the best recommendation model automatically in the background.
- **Distributed prediction:** Support horizontal scaling in the recommendation stage after single node training.
- **RESTful APIs:** Expose RESTful APIs for data CRUD and recommendation requests.
- **Online evaluation:** Analyze online recommendation performance from recently inserted feedback.
- **Dashboard:** Provide GUI for data management, system monitoring, and cluster status checking.

## Quick Start

The playground mode has been prepared for beginners. Just set up a recommender system for GitHub repositories by the following commands.

- Linux/macOS:

```bash
curl -fsSL https://gorse.io/playground | bash
```

- Docker:

```bash
docker run -p 8088:8088 zhenghaoz/gorse-in-one --playground
```

The playground mode will download data from [GitRec](https://gitrec.gorse.io/) and import it into Gorse. The dashboard is available at `http://localhost:8088`.

<img width=720 src="assets/dashboard.jpeg"/>

After the "Find neighbors of items" task is completed on the "Tasks" page, try to insert several feedbacks into Gorse. Suppose Bob is a frontend developer who starred several frontend repositories in GitHub. We insert his star feedback to Gorse.

```bash
read -d '' JSON << EOF
[
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"vuejs:vue\", \"Timestamp\": \"2022-02-24\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"d3:d3\", \"Timestamp\": \"2022-02-25\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"dogfalo:materialize\", \"Timestamp\": \"2022-02-26\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"mozilla:pdf.js\", \"Timestamp\": \"2022-02-27\" },
{ \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"moment:moment\", \"Timestamp\": \"2022-02-28\" }
]
EOF

curl -X POST http://127.0.0.1:8088/api/feedback \
-H 'Content-Type: application/json' \
-d "$JSON"
```

Then, fetch 10 recommended items from Gorse. We can find that frontend-related repositories are recommended for Bob.

```bash
curl http://127.0.0.1:8088/api/recommend/bob?n=10
```

<details>
<summary>Example outputs:</summary>

```json
[
"mbostock:d3",
"nt1m:material-framework",
"mdbootstrap:vue-bootstrap-with-material-design",
"justice47:f2-vue",
"10clouds:cyclejs-cookie",
"academicpages:academicpages.github.io",
"accenture:alexia",
"addyosmani:tmi",
"1wheel:d3-starterkit",
"acdlite:redux-promise"
]
```

</details>

> The exact output might be different from the example since the playground dataset changes over time.

For more information:

- Read [official documents](https://gorse.io/docs/master)
- Visit [official demo](https://gitrec.gorse.io/)
- Discuss on [Discord](https://discord.gg/x6gAtNNkAE) or [GitHub Discussion](https://github.com/gorse-io/gorse/discussions)

## Architecture

Gorse is a single-node training and distributed prediction recommender system. Gorse stores data in MySQL, MongoDB, or Postgres, with intermediate results cached in Redis, MySQL, MongoDB and Postgres.

1. The cluster consists of a master node, multiple worker nodes, and server nodes.
1. The master node is responsible for model training, non-personalized item recommendation, configuration management, and membership management.
1. The server node is responsible for exposing the RESTful APIs and online real-time recommendations.
1. Worker nodes are responsible for offline recommendations for each user.

In addition, the administrator can perform system monitoring, data import and export, and system status checking via the dashboard on the master node.

<img width=520 src="assets/architecture.png"/>

## Contributors

<a href="https://github.com/zhenghaoz/gorse/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zhenghaoz/gorse" />
</a>

Any contribution is appreciated: report a bug, give advice or create a pull request. Read [CONTRIBUTING.md](CONTRIBUTING.md) for more information.

## Acknowledgments

`gorse` is inspired by the following projects:

- [Guibing Guo's librec](https://github.com/guoguibing/librec)
- [Nicolas Hug's Surprise](https://github.com/NicolasHug/Surprise)
- [Golang Samples's gopher-vector](https://github.com/golang-samples/gopher-vector)
> [!CAUTION]
> Still in development. Not ready for production use.
2 changes: 1 addition & 1 deletion client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ In the root directory of Gorse source:

```bash
# Setup Gorse
docker-compose up -d
docker compose up -d

# Test
go test -tags='integrate_test' ./client/
Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-in-one/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

COPY . gorse

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-in-one/Dockerfile.windows
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

COPY . gorse

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-master/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

WORKDIR /src

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-master/Dockerfile.windows
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

COPY . gorse

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-server/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

WORKDIR /src

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-server/Dockerfile.windows
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

COPY . gorse

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-worker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

WORKDIR /src

Expand Down
2 changes: 1 addition & 1 deletion cmd/gorse-worker/Dockerfile.windows
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.22
FROM golang:1.23

COPY . gorse

Expand Down
Loading