Publish snapshot Docker image (#32)

diff --git a/.github/workflows/publish-docker.yaml b/.github/workflows/publish-docker.yaml
new file mode 100644
index 0000000..ae6a526
--- /dev/null
+++ b/.github/workflows/publish-docker.yaml
@@ -0,0 +1,57 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: publish-docker
+
+on:
+  push:
+    branches:
+      - master
+
+env:
+  SKIP_TEST: true
+  HUB: ghcr.io/apache/skywalking-agent-test-tool
+
+jobs:
+  build:
+    if: github.repository == 'apache/skywalking-agent-test-tool'
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      packages: write
+    timeout-minutes: 90
+    env:
+      TAG: ${{ github.sha }}
+    steps:
+      - name: Checkout source codes
+        uses: actions/checkout@v2
+      - name: Cache local Maven repository
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2/repository
+          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            ${{ runner.os }}-maven-
+      - name: Log in to the Container registry
+        uses: docker/login-action@v1.10.0
+        with:
+          registry: ${{ env.HUB }}
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+      - name: Build docker image
+        run: |
+          make docker || make docker
+          make docker.push || make docker.push
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d64b766
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,66 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHELL := /bin/bash -o pipefail
+
+export TOOLS_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+
+export TOOLS_OUT:=${TOOLS_ROOT}/dist
+
+SKIP_TEST?=false
+
+HUB?=skywalking
+
+TAG?=latest
+
+DOCKER_BUILD_TOP:=${TOOLS_OUT}/docker_build
+
+DOCKER_TARGETS:=docker.mock-collector
+
+.PHONY: build docker docker.mock docker.push
+
+build:
+	cd $(TOOLS_ROOT) && ./mvnw -B -Dmaven.test.skip=$(SKIP_TEST) clean package
+
+docker: build docker.mock-collector
+
+docker.mock-collector: $(TOOLS_OUT)/skywalking-mock-collector.tar.gz
+docker.mock-collector: $(TOOLS_ROOT)/docker/Dockerfile.mock-collector
+		$(DOCKER_RULE)
+
+# $@ is the name of the target
+# $^ the name of the dependencies for the target
+# Rule Steps #
+##############
+# 1. Make a directory $(DOCKER_BUILD_TOP)/%@
+# 2. This rule uses cp to copy all dependency filenames into into $(DOCKER_BUILD_TOP/$@
+# 3. This rule then changes directories to $(DOCKER_BUID_TOP)/$@
+# 4. This rule runs $(BUILD_PRE) prior to any docker build and only if specified as a dependency variable
+
+DOCKER_RULE=time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && cp -r $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ && $(BUILD_PRE) docker build --no-cache -t $(HUB)/$(subst docker.,,$@):$(TAG) -f Dockerfile$(suffix $@) .)
+
+# for each docker.XXX target create a push.docker.XXX target that pushes
+# the local docker image to another hub
+# a possible optimization is to use tag.$(TGT) as a dependency to do the tag for us
+$(foreach TGT,$(DOCKER_TARGETS),$(eval push.$(TGT): | $(TGT) ; \
+	time (docker push $(HUB)/$(subst docker.,,$(TGT)):$(TAG))))
+
+# create a DOCKER_PUSH_TARGETS that's each of DOCKER_TARGETS with a push. prefix
+DOCKER_PUSH_TARGETS:=
+$(foreach TGT,$(DOCKER_TARGETS),$(eval DOCKER_PUSH_TARGETS+=push.$(TGT)))
+
+# Will build and push docker images.
+docker.push: $(DOCKER_PUSH_TARGETS)
\ No newline at end of file
diff --git a/docker/Dockerfile.mock-collector b/docker/Dockerfile.mock-collector
new file mode 100644
index 0000000..b9205d2
--- /dev/null
+++ b/docker/Dockerfile.mock-collector
@@ -0,0 +1,29 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM openjdk:8
+
+WORKDIR /skywalking-mock-collector
+
+COPY skywalking-mock-collector.tar.gz /skywalking-mock-collector
+
+RUN tar -xf skywalking-mock-collector.tar.gz --strip 1 && \
+    rm -rf skywalking-mock-collector.tar.gz
+
+RUN chmod +x bin/collector-startup.sh
+
+ENTRYPOINT bin/collector-startup.sh
\ No newline at end of file
diff --git a/mock-collector/src/main/assembly/assembly.xml b/mock-collector/src/main/assembly/assembly.xml
index 2ba07c1..81973ae 100644
--- a/mock-collector/src/main/assembly/assembly.xml
+++ b/mock-collector/src/main/assembly/assembly.xml
@@ -34,7 +34,7 @@
             <directory>${project.basedir}/bin</directory>
             <outputDirectory>/bin</outputDirectory>
             <includes>
-                <include>*.sh</include>
+                <include>collector-startup.sh</include>
             </includes>
             <fileMode>0755</fileMode>
         </fileSet>