diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..2fc13db --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,55 @@ +name: CI + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +env: + REGISTRY: "cr.selcloud.ru/microservices" + IMAGE_NAME: "auth-service" + CONTAINER_NAME: "auth-service-container" + +jobs: + image-build-and-push: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout master + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Registry + run: docker login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} $REGISTRY + + - name: Build and Push Docker Image + run: | + TAG_NAME=$(echo $GITHUB_SHA | head -c7) + docker buildx create --use + docker buildx build --no-cache --push --tag $REGISTRY/$IMAGE_NAME:$TAG_NAME . + + deploy-image: + runs-on: ubuntu-22.04 + needs: image-build-and-push + + steps: + - name: Deploy to Selectel Cloud via SSH action + uses: appleboy/ssh-action@v1.0.0 + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_KEY }} + envs: IMAGE_NAME,REGISTRY,GITHUB_SHA,CONTAINER_NAME + script: | + TAG_NAME=$(echo $GITHUB_SHA | head -c7) + + docker login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} $REGISTRY + + docker stop $CONTAINER_NAME + + docker rm $CONTAINER_NAME + + docker run -d -p 50051:50051 --name $CONTAINER_NAME -t $REGISTRY/$IMAGE_NAME:$TAG_NAME \ No newline at end of file diff --git a/.github/workflows/go.yaml b/.github/workflows/go.yaml deleted file mode 100644 index 868873e..0000000 --- a/.github/workflows/go.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: Go - -on: - push: - branches: [ main, master ] - pull_request: - branches: [ main, master ] - -jobs: - build-and-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.20' - cache-dependency-path: go.sum - - - name: Build - run: go build -o ./bin/ -v ./... - - - name: Test - run: go test -v ./... - - linter: - name: lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: '1.20' - cache: false - - name: golangci-lint - uses: golangci/golangci-lint-action@v3 - with: - # Require: The version of golangci-lint to use. - # When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version. - # When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit. - version: v1.53 - - # Optional: working directory, useful for monorepos - # working-directory: somedir - - # Optional: golangci-lint command line arguments. - # - # Note: By default, the `.golangci.yml` file should be at the root of the repository. - # The location of the configuration file can be changed by using `--config=` - args: --timeout=30m --config=./.golangci.pipeline.yaml --issues-exit-code=0 - - # Optional: show only new issues if it's a pull request. The default value is `false`. - # only-new-issues: true - - # Optional: if set to true, then all caching functionality will be completely disabled, - # takes precedence over all other caching options. - # skip-cache: true - - # Optional: if set to true, then the action won't cache or restore ~/go/pkg. - # skip-pkg-cache: true - - # Optional: if set to true, then the action won't cache or restore ~/.cache/go-build. - # skip-build-cache: true - - # Optional: The mode to install golangci-lint. It can be 'binary' or 'goinstall'. - # install-mode: "goinstall" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c8b7709 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM golang:1.20-alpine3.17 AS builder + +COPY . /auth +WORKDIR /auth + +RUN go mod download +RUN go build -o ./bin/main cmd/main.go + +FROM alpine:latest + +WORKDIR /root/ +COPY --from=builder /auth/bin/main . + +CMD ["./main"]