From a817b15f0339764b2d06f9ea16fac0b45fe94f93 Mon Sep 17 00:00:00 2001
From: Yana Kernerman <kernerya@gmail.com>
Date: Sun, 11 Aug 2024 17:26:53 +0200
Subject: [PATCH] build job for any branch or merge request

---
 .gitlab-ci.yml | 48 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 43 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b229c54..b477485 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,12 +5,50 @@ workflow:
       when: 'always'
     - when: 'never'
 
+stages:
+  - test
+  - build
+  - publish
 
-job_trigger-pipeline:
-  trigger:
-    project: 'fb6-wp11-devops/webservice-build-and-publish'
+# Main job to test the application
+job_test_the_code:
+  stage: test
+  image: registry.hub.docker.com/library/golang:1.21 # Official Docker image provided by Go. It contains pre-configured environment for building and running Go applications.
+  script:
+    - go get -t ./... # Installs dependencies, including those for testing
+    - go test -race -v ./... # Run tests with race detection enabled
 
+job_build_artifact:
+  stage: build
+  rules: # Conditions under which this job should run
+    - if: $CI_COMMIT_REF_NAME =~ /^.*$/  # Run this job for any branch or merge request event.
+      when: always
+  image: registry.hub.docker.com/library/golang:1.21
+  script:
+    - go get -t ./... # Installs dependencies
+    - go build -o ./artifact.bin ./*.go # Builds the Go application and outputs a binary named artifact.bin
+  artifacts:
+    paths: # Specifies the paths to the files that are to be saved as artifacts after the job has been completed.
+      - ./artifact.bin
+    expire_in: 1 week
 
-hello-world-job:
+job_publish_artifact:
+  stage: publish
+  rules: # Conditions under which this job should run
+    - if:   $CI_COMMIT_REF_NAME =~ /^.*$/ # Run this job for any branch or merge request event.
+      when: always
+  image: curlimages/curl:latest # Custom image with curl
+  tags:
+    - docker-privileged
+  dependencies:
+    - job_build_artifact
   script:
-    - 'ls -al ./'
+    - echo "Publishing artifact..."
+    - |
+      curl \
+        --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
+        --upload-file ./artifact.bin \
+        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/artifacts/${version}/webservice"
+  only:
+    - tags
+
-- 
GitLab