From 8e32cc33a5b4ea9c6708596f21ba03925e909062 Mon Sep 17 00:00:00 2001 From: Kazumichi Yamamoto Date: Fri, 8 Jul 2022 15:57:40 +0900 Subject: [PATCH 1/2] Squashed 'includes/' content from commit 660c1b3 git-subtree-dir: includes git-subtree-split: 660c1b3f78ac52ce2fb861db928ca299838be5c6 --- AUTHORS | 6 ++ LICENSE | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 52 +++++++++++++ go/common.mk | 87 ++++++++++++++++++++++ go/single.mk | 40 ++++++++++ 5 files changed, 387 insertions(+) create mode 100644 AUTHORS create mode 100644 LICENSE create mode 100644 README.md create mode 100644 go/common.mk create mode 100644 go/single.mk diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..5faa0e82 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,6 @@ +# This is the list of Usacloud authors for copyright purposes. +# +# This does not necessarily list everyone who has contributed code, since in +# some cases, their employer may be the copyright holder. To see the full list +# of contributors, see the revision history in source control. +Kazumichi Yamamoto diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..57bc88a1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/README.md b/README.md new file mode 100644 index 00000000..f43c68ef --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# makefile + +sacloudプロダクトで共通利用するMakefile + +- `go/`: Go言語向け + +## Usage + +利用するプロジェクト側で以下のように利用します。 + +#### リモートリポジトリの追加(初回のみ) + +```bash +git remote add makefile https://github.com/sacloud/makefile.git +``` + +#### 追加(初回のみ) + +```bash +git subtree add --prefix=includes --squash makefile v0.0.6 +``` + +利用する側のプロジェクトではMakefileを以下のように記述します。 + +```makefile +# 必要に応じて変数定義 +AUTHOR ?= The sacloud/example Authors +COPYRIGHT_YEAR ?= 2022 +BIN ?= example +DEFAULT_GOALS ?= fmt set-license go-licenses-check goimports lint test build + +# 必要なファイルをインクルード +include includes/go/common.mk +include includes/go/simple.mk + +# ゴールを追加 +default: $(DEFAULT_GOALS) +tools: dev-tools # toolsゴールはsacloudプロダクト向け日次CIを行うプロジェクトでは必須 +``` + +#### 更新 + +```bash +git subtree pull --prefix=includes --squash makefile v0.0.6 +``` + +## License + +`sacloud/makefile` Copyright (C) 2022 The sacloud/makefile Authors. + +This project is published under [Apache 2.0 License](LICENSE). + diff --git a/go/common.mk b/go/common.mk new file mode 100644 index 00000000..238867bc --- /dev/null +++ b/go/common.mk @@ -0,0 +1,87 @@ +# +# Copyright 2022 The sacloud/makefile Authors +# +# Licensed 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. +# + +AUTHOR ?= The sacloud/makefile Authors +COPYRIGHT_YEAR ?= 2022 +COPYRIGHT_FILES ?= $$(find . -name "*.go" -print | grep -v "/vendor/") +GO ?= go +DEFAULT_GOALS ?= fmt set-license go-licenses-check goimports lint test +GOLANG_CI_LINT_VERSION ?= v1.46.2 +TEXTLINT_ACTION_VERSION ?= v0.0.3 + +.DEFAULT_GOAL = default + +.PHONY: test +test: + @echo "running 'go test'..." + TESTACC= $(GO) test ./... $(TESTARGS) -v -timeout=120m -parallel=8 -race; + +.PHONY: testacc +testacc: + @echo "running 'go test' with TESTACC=1..." + TESTACC=1 $(GO) test ./... $(TESTARGS) --tags=acctest -v -timeout=120m -parallel=8 ; + +.PHONY: dev-tools +dev-tools: + $(GO) install github.com/rinchsan/gosimports/cmd/gosimports@latest + $(GO) install golang.org/x/tools/cmd/stringer@latest + $(GO) install github.com/sacloud/addlicense@latest + $(GO) install github.com/client9/misspell/cmd/misspell@latest + $(GO) install github.com/google/go-licenses@v1.0.0 + $(GO) install github.com/rhysd/actionlint/cmd/actionlint@latest + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $$(go env GOPATH)/bin $(GOLANG_CI_LINT_VERSION) + +.PHONY: goimports +goimports: fmt + @echo "running gosimports..." + @gosimports -l -w . + +.PHONY: fmt +fmt: + @echo "running gofmt..." + @find . -name '*.go' | grep -v vendor | xargs gofmt -s -w + +.PHONY: godoc +godoc: + godoc -http=localhost:6060 + +.PHONY: lint +lint: lint-go lint-text lint-action + +.PHONY: lint-go +lint-go: + @echo "running golanci-lint..." + @golangci-lint run --fix ./... + +.PHONY: textlint lint-text +textlint: lint-text +lint-text: + @echo "running textlint..." + @docker run -t --rm -v $$PWD:/work -w /work ghcr.io/sacloud/textlint-action:$(TEXTLINT_ACTION_VERSION) . + +.PHONY: lint-action +lint-action: + @echo "running rhysd/actionlint..." + @actionlint + +.PHONY: set-license +set-license: + @addlicense -c "$(AUTHOR)" -y "$(COPYRIGHT_YEAR)" $(COPYRIGHT_FILES) + +.PHONY: go-licenses-check +go-licenses-check: + @echo "running go-licenses..." + @go-licenses check . diff --git a/go/single.mk b/go/single.mk new file mode 100644 index 00000000..9afdf37e --- /dev/null +++ b/go/single.mk @@ -0,0 +1,40 @@ +# +# Copyright 2022 The sacloud/makefile Authors +# +# Licensed 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. +# + +GO ?= go +BIN ?= TODO_PLEASE_SET_BIN_VARIABLE +GO_ENTRY_FILE ?= main.go +GO_FILES ?= $(shell find . -name '*.go') +BUILD_LDFLAGS ?= + +.PHONY: install +install: + @echo "running 'go install'..." + $(GO) install + +.PHONY: build +build: $(BIN) + +$(BIN): $(GO_FILES) go.mod go.sum + @echo "running 'go build'..." + @GOOS=$${OS:-"`$(GO) env GOOS`"} GOARCH=$${ARCH:-"`$(GO) env GOARCH`"} CGO_ENABLED=0 $(GO) build -ldflags=$(BUILD_LDFLAGS) -o $(BIN) $(GO_ENTRY_FILE) + +.PHONY: clean +clean: + @echo "cleaning..." + rm -rf $(BIN) + +DEFAULT_GOALS += build \ No newline at end of file From ee0b0981943c10d2b4389ab8ccb1029cccd4e18c Mon Sep 17 00:00:00 2001 From: Kazumichi Yamamoto Date: Fri, 8 Jul 2022 16:19:43 +0900 Subject: [PATCH 2/2] sacloud/go-template@v0.0.5 --- .github/dependabot.yml | 18 ++++++ .../workflows/publish_dev_docker_image.yaml | 13 +++-- .github/workflows/publish_docker_image.yaml | 19 ++++--- .github/workflows/release.yaml | 34 ++++++----- .github/workflows/tests.yaml | 56 ++++++++++++++----- .textlintignore | 2 + .textlintrc | 23 ++++++++ Makefile | 53 +++++------------- README.md | 35 +++++------- includes/go/common.mk | 2 +- 10 files changed, 149 insertions(+), 106 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .textlintignore create mode 100644 .textlintrc diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..bcbb3068 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 + +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily + time: "00:00" + commit-message: + prefix: "ci:" + + - package-ecosystem: gomod + directory: / + schedule: + interval: daily + time: "00:00" + commit-message: + prefix: "go:" \ No newline at end of file diff --git a/.github/workflows/publish_dev_docker_image.yaml b/.github/workflows/publish_dev_docker_image.yaml index d1bb52d9..866669f2 100644 --- a/.github/workflows/publish_dev_docker_image.yaml +++ b/.github/workflows/publish_dev_docker_image.yaml @@ -11,20 +11,25 @@ jobs: steps: - name: Check out the repo - uses: actions/checkout@v2 + uses: actions/checkout@v3 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.CR_PAT }} - name: Build and push to GitHub Container Registry - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: + context: . + platforms: linux/amd64,linux/arm64 tags: ghcr.io/sacloud/packer:dev push: true \ No newline at end of file diff --git a/.github/workflows/publish_docker_image.yaml b/.github/workflows/publish_docker_image.yaml index 7ad6f7b6..8c388964 100644 --- a/.github/workflows/publish_docker_image.yaml +++ b/.github/workflows/publish_docker_image.yaml @@ -10,26 +10,31 @@ jobs: steps: - name: Check out the repo - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Docker meta - id: docker_meta - uses: crazy-max/ghaction-docker-meta@v1 + id: meta + uses: docker/metadata-action@v4 with: images: ghcr.io/sacloud/packer + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.CR_PAT }} - name: Build and push to GitHub Container Registry - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: - tags: ${{ steps.docker_meta.outputs.tags }},ghcr.io/sacloud/packer:latest + context: . + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.meta.outputs.tags }},ghcr.io/sacloud/packer:latest push: true diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cb7fd772..203d54a4 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,43 +1,41 @@ name: Release + on: push: tags: 'v[0-9]+.[0-9]+.[0-9]+' + env: GOPROXY: https://proxy.golang.org + jobs: - build: - name: build - runs-on: ubuntu-20.04 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + goreleaser: + runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Unshallow run: git fetch --prune --unshallow - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: - go-version: 1.16 - - - name: Describe plugin - id: plugin_describe - run: echo "::set-output name=api_version::$(go run . describe | jq -r '.api_version')" + go-version: 1.17 - name: Import GPG key id: import_gpg - uses: paultyng/ghaction-import-gpg@v2.1.0 - env: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.PASSPHRASE }} + git-user-signingkey: true + git-commit-gpgsign: true - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v2 + uses: goreleaser/goreleaser-action@v3 with: version: latest args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - API_VERSION: ${{ steps.plugin_describe.outputs.api_version }} \ No newline at end of file + GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index d99d0dab..99fe4a5a 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -3,47 +3,73 @@ on: [push, pull_request] env: GOPROXY: https://proxy.golang.org jobs: - lint: - name: lint + lint-text: + name: lint-text runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Unshallow run: git fetch --prune --unshallow - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: - go-version: 1.16 + go-version: 1.18 - name: Setup tools - run: make tools + run: | + make tools + + - name: make lint-text + run: | + make lint-text + lint-go: + name: lint-go + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Unshallow + run: git fetch --prune --unshallow + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.18 + + - name: Setup tools + run: | + make tools + + - name: make lint-go + run: | + make lint-go - - name: make lint - run: make lint test: name: test runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-latest, windows-latest, ubuntu-20.04] + os: [macos-latest, windows-latest, ubuntu-22.04, ubuntu-20.04] steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Unshallow run: git fetch --prune --unshallow - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: - go-version: 1.16 + go-version: 1.18 - name: Setup tools - run: make tools + run: | + make tools - name: make test - run: make test - + run: | + make test diff --git a/.textlintignore b/.textlintignore new file mode 100644 index 00000000..93c32c00 --- /dev/null +++ b/.textlintignore @@ -0,0 +1,2 @@ +LICENSE +dist/ \ No newline at end of file diff --git a/.textlintrc b/.textlintrc new file mode 100644 index 00000000..381e61ab --- /dev/null +++ b/.textlintrc @@ -0,0 +1,23 @@ +{ + "rules": { + "common-misspellings": true, + "preset-jtf-style": { + "3.1.1.全角文字と半角文字の間": false, + "4.2.7.コロン(:)":false, + "4.3.1.丸かっこ()": false + }, + "preset-ja-technical-writing": { + "ja-no-mixed-period": false, + "no-exclamation-question-mark": false, + "sentence-length": { + max:150 + }, + "max-kanji-continuous-len": { + "max": 7 + }, + "max-comma": { + max: 4 + } + } + } +} diff --git a/Makefile b/Makefile index cf56871c..dd5d74bb 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,19 @@ -NAME=sakuracloud -BINARY=packer-plugin-${NAME} -HASHICORP_PACKER_PLUGIN_SDK_VERSION?=$(shell go list -m github.com/hashicorp/packer-plugin-sdk | cut -d " " -f2) +#==================== +AUTHOR ?= The sacloud/go-template Authors +COPYRIGHT_YEAR ?= 2022 + +BIN ?= packer-plugin-sakuracloud + +include includes/go/common.mk +include includes/go/single.mk +#==================== -TEST?=$$(go list ./... | grep -v vendor) -GOFMT_FILES?=$$(find . -name '*.go' | grep -v vendor) +HASHICORP_PACKER_PLUGIN_SDK_VERSION?=$(shell go list -m github.com/hashicorp/packer-plugin-sdk | cut -d " " -f2) -default: lint build +default: fmt generate go-licenses-check goimports lint test .PHONY: tools -tools: install-packer-sdc - GO111MODULE=off go get golang.org/x/tools/cmd/goimports - GO111MODULE=off go get github.com/client9/misspell/cmd/misspell - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/v1.38.0/install.sh | sh -s -- -b $$(go env GOPATH)/bin v1.38.0 +tools: dev-tools install-packer-sdc install-packer-sdc: go install github.com/hashicorp/packer-plugin-sdk/cmd/packer-sdc@${HASHICORP_PACKER_PLUGIN_SDK_VERSION} @@ -28,43 +30,16 @@ install-packer: .PHONY: install-plugin install-plugin: dev -.PHONY: clean -clean: - rm -f ${BINARY} - -build: - @go build -o ${BINARY} - dev: build @mkdir -p ~/.packer.d/plugins/ - @mv ${BINARY} ~/.packer.d/plugins/${BINARY} + @mv ${BIN} ~/.packer.d/plugins/${BIN} generate: go generate ./... -.PHONY: test testacc -test: - go test $(TEST) $(TESTARGS) -v -timeout=30m -parallel=4 ; - -testacc: - @echo "WARN: Acceptance tests will take a long time to run and may cost money. Ctrl-C if you want to cancel." - PACKER_ACC=1 go test -v $(TEST) $(TESTARGS) -timeout=45m - -.PHONY: lint fmt golint goimports -lint: fmt goimports golangci-lint - -fmt: - find . -name '*.go' | grep -v vendor | xargs gofmt -s -w - -golangci-lint: fmt - golangci-lint run ./... - -goimports: - find . -name '*.go' | grep -v vendor | xargs goimports -l -w - ci-release-docs: install-packer-sdc @packer-sdc renderdocs -src docs -partials docs-partials/ -dst docs/ @/bin/sh -c "[ -d docs ] && zip -r docs.zip docs/" plugin-check: install-packer-sdc build - @packer-sdc plugin-check ${BINARY} \ No newline at end of file + @packer-sdc plugin-check ${BIN} \ No newline at end of file diff --git a/README.md b/README.md index 60442db9..93eb791a 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ v0.7以降`homebrew`はサポートされなくなりました。 #### APIキーの設定 APIキーを環境変数に設定しておきます。 -(APIキーは以下で作成するjsonファイルに記載することも可能です) +(APIキーは以下で作成するjsonファイルに記載する方法もあります) $ export SAKURACLOUD_ACCESS_TOKEN=[APIトークン] $ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[APIシークレット] @@ -175,9 +175,9 @@ jsonファイルで指定できるオプションの一覧は以下の通りで ### 必須項目 -- `access_token`(string): APIトークン。この値は環境変数`SAKURACLOUD_ACCESS_TOKEN`で指定することも可能です。 +- `access_token`(string): APIトークン。この値は環境変数`SAKURACLOUD_ACCESS_TOKEN`でも指定可能です。 -- `access_token_secret`(string): APIシークレット。この値は環境変数`SAKURACLOUD_ACCESS_TOKEN_SECRET`で指定することも可能です。 +- `access_token_secret`(string): APIシークレット。この値は環境変数`SAKURACLOUD_ACCESS_TOKEN_SECRET`でも指定可能です。 - `zone`(string): 対象ゾーン。以下の値が指定可能です。 - `is1a`: 石狩第1ゾーン @@ -185,7 +185,7 @@ jsonファイルで指定できるオプションの一覧は以下の通りで - `tk1a`: 東京第1ゾーン - `tk1b`: 東京第2ゾーン -- `os_type`(string): ベースとするアーカイブの種別。以下の値が指定可能です。 +- `os_type`(string): ベースとするアーカイブの種別。以下の値が指定可能です | 値 | 説明 | |--------------------------------|-------------------------------------------------------| @@ -256,9 +256,9 @@ jsonファイルで指定できるオプションの一覧は以下の通りで - `disable_virtio_net`(bool): `true`の場合、NICでの仮想化ドライバ利用を無効化します。デフォルト値:`false` -- `source_archive`(int64): 元となるアーカイブのID、`os_type`が`windows`、又は`custom`の場合に指定可能です。 +- `source_archive`(int64): 元となるアーカイブのID、`os_type`が`windows`、又は`custom`の場合に指定可能です -- `source_disk`(int64): 元となるディスクのID、`os_type`が`custom`の場合のみ指定可能です。 +- `source_disk`(int64): 元となるディスクのID、`os_type`が`custom`の場合のみ指定可能です - `iso_size`(int): アップロードするISOファイルのサイズ、`5`または`10`が指定可能(GB単位)、デフォルト値: `5` @@ -281,7 +281,7 @@ jsonファイルで指定できるオプションの一覧は以下の通りで - SSH関連オプション: SSHキー関連の挙動を指定します。 - - `disable_generate_public_key`: trueの場合、秘密鍵に対応する公開鍵の生成/さくらのクラウドAPIを通じての公開鍵アップロードを行いません。 + - `disable_generate_public_key`: trueの場合、秘密鍵に対応する公開鍵の生成/さくらのクラウドAPIを通じての公開鍵アップロードを行いません - `ssh_private_key_file`: 秘密鍵ファイルのパス Note: `ssh_private_key_file`が未指定の場合、`packer build`実行時に秘密鍵/公開鍵が生成されます。 @@ -293,7 +293,7 @@ Note: `ssh_private_key_file`が未指定の場合、`packer build`実行時に ### ISOイメージ関連項目の指定について -ISOイメージからの構築を行う場合、以下の項目を指定してください。 +ISOイメージから構築する場合、以下の項目を指定してください。 #### さくらのクラウド上のISOイメージを利用する場合 @@ -309,7 +309,7 @@ ISOイメージからの構築を行う場合、以下の項目を指定して #### ISOイメージをダウンロードして利用する場合 ダウンロード元のURLなどを以下のように指定します。 -PackerがISOイメージのダウンロードを行い、さくらのクラウド上へアップロードを行います。 +PackerがISOイメージをダウンロードし、さくらのクラウド上へアップロードします。 - `os_type`に`iso`を指定 - `iso_url`または`iso_urls` にISOイメージのURLを指定 @@ -353,7 +353,8 @@ PackerがISOイメージのダウンロードを行い、さくらのクラウ #### 使用例 -この例は以下ののキー入力を行うものです。 +この例は以下のキーを入力します。 + - 1) Ctrl+Alt+Delを送信 - 2) 10秒待機 - 3) パスワード文字列("put-your-password") + Enterキーを送信 @@ -375,17 +376,8 @@ PackerがISOイメージのダウンロードを行い、さくらのクラウ ### パブリックアーカイブからの構築サンプル - - [[CentOS]](examples/centos): CentOSパブリックアーカイブからの構築 - - [[Ubuntu]](examples/ubuntu): Ubuntuパブリックアーカイブからの構築 - - [[Windows]](examples/windows): Windows Server 2012パブリックアーカイブから、`boot_command`でWinRMを有効にする構成 - - [[Windows2016]](examples/windows2016): Windows Server 2016パブリックアーカイブから、`boot_command`でWinRMを有効にする構成 - - Windowsパブリックアーカイブから構築したサーバーに対し、`boot_command`にて初回ログイン〜WinRMの有効化までを行います。 - - WinRMの有効化にはAnsibleが公開しているPowerShellスクリプトを用いています。 - - WinRMでの接続後にPowerShellでのプロビジョニングを行います。 - + - [[CentOS]](examples/centos): CentOSパブリックアーカイブからの構築 + - [[Ubuntu]](examples/ubuntu): Ubuntuパブリックアーカイブからの構築 ### ISOイメージからの構築サンプル @@ -398,4 +390,3 @@ PackerがISOイメージのダウンロードを行い、さくらのクラウ `packer-plugin-sakuracloud` Copyright (C) 2016-2022 [The packer-plugin-sakuracloud Authors](AUTHORS). This project is published under [MPL-2.0](LICENSE). - \ No newline at end of file diff --git a/includes/go/common.mk b/includes/go/common.mk index 238867bc..a583780d 100644 --- a/includes/go/common.mk +++ b/includes/go/common.mk @@ -32,7 +32,7 @@ test: .PHONY: testacc testacc: @echo "running 'go test' with TESTACC=1..." - TESTACC=1 $(GO) test ./... $(TESTARGS) --tags=acctest -v -timeout=120m -parallel=8 ; + PACKER_ACC=1 TESTACC=1 $(GO) test ./... $(TESTARGS) --tags=acctest -v -timeout=120m -parallel=8 ; .PHONY: dev-tools dev-tools: