├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── open_an_issue.md ├── config.yml └── workflows │ ├── automerge.yml │ ├── go-check.yml │ ├── go-test.yml │ ├── release-check.yml │ ├── releaser.yml │ ├── stale.yml │ └── tagpush.yml ├── LICENSE ├── README.md ├── deprecated.go ├── go.mod ├── go.sum └── version.json /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Getting Help on IPFS 4 | url: https://ipfs.io/help 5 | about: All information about how and where to get help on IPFS. 6 | - name: IPFS Official Forum 7 | url: https://discuss.ipfs.io 8 | about: Please post general questions, support requests, and discussions here. 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/open_an_issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Open an issue 3 | about: Only for actionable issues relevant to this repository. 4 | title: '' 5 | labels: need/triage 6 | assignees: '' 7 | 8 | --- 9 | 20 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for welcome - https://github.com/behaviorbot/welcome 2 | 3 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 4 | # Comment to be posted to on first time issues 5 | newIssueWelcomeComment: > 6 | Thank you for submitting your first issue to this repository! A maintainer 7 | will be here shortly to triage and review. 8 | 9 | In the meantime, please double-check that you have provided all the 10 | necessary information to make this process easy! Any information that can 11 | help save additional round trips is useful! We currently aim to give 12 | initial feedback within **two business days**. If this does not happen, feel 13 | free to leave a comment. 14 | 15 | Please keep an eye on how this issue will be labeled, as labels give an 16 | overview of priorities, assignments and additional actions requested by the 17 | maintainers: 18 | 19 | - "Priority" labels will show how urgent this is for the team. 20 | - "Status" labels will show if this is ready to be worked on, blocked, or in progress. 21 | - "Need" labels will indicate if additional input or analysis is required. 22 | 23 | Finally, remember to use https://discuss.ipfs.io if you just need general 24 | support. 25 | 26 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 27 | # Comment to be posted to on PRs from first time contributors in your repository 28 | newPRWelcomeComment: > 29 | Thank you for submitting this PR! 30 | 31 | A maintainer will be here shortly to review it. 32 | 33 | We are super grateful, but we are also overloaded! Help us by making sure 34 | that: 35 | 36 | * The context for this PR is clear, with relevant discussion, decisions 37 | and stakeholders linked/mentioned. 38 | 39 | * Your contribution itself is clear (code comments, self-review for the 40 | rest) and in its best form. Follow the [code contribution 41 | guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md#code-contribution-guidelines) 42 | if they apply. 43 | 44 | Getting other community members to do a review would be great help too on 45 | complex PRs (you can ask in the chats/forums). If you are unsure about 46 | something, just leave us a comment. 47 | 48 | Next steps: 49 | 50 | * A maintainer will triage and assign priority to this PR, commenting on 51 | any missing things and potentially assigning a reviewer for high 52 | priority items. 53 | 54 | * The PR gets reviews, discussed and approvals as needed. 55 | 56 | * The PR is merged by maintainers when it has been approved and comments addressed. 57 | 58 | We currently aim to provide initial feedback/triaging within **two business 59 | days**. Please keep an eye on any labelling actions, as these will indicate 60 | priorities and status of your contribution. 61 | 62 | We are very grateful for your contribution! 63 | 64 | 65 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 66 | # Comment to be posted to on pull requests merged by a first time user 67 | # Currently disabled 68 | #firstPRMergeComment: "" 69 | -------------------------------------------------------------------------------- /.github/workflows/automerge.yml: -------------------------------------------------------------------------------- 1 | # File managed by web3-bot. DO NOT EDIT. 2 | # See https://github.com/protocol/.github/ for details. 3 | 4 | name: Automerge 5 | on: [ pull_request ] 6 | 7 | jobs: 8 | automerge: 9 | uses: protocol/.github/.github/workflows/automerge.yml@master 10 | with: 11 | job: 'automerge' 12 | -------------------------------------------------------------------------------- /.github/workflows/go-check.yml: -------------------------------------------------------------------------------- 1 | # File managed by web3-bot. DO NOT EDIT. 2 | # See https://github.com/protocol/.github/ for details. 3 | 4 | on: [push, pull_request] 5 | name: Go Checks 6 | 7 | jobs: 8 | unit: 9 | runs-on: ubuntu-latest 10 | name: All 11 | env: 12 | RUNGOGENERATE: false 13 | steps: 14 | - uses: actions/checkout@v3 15 | with: 16 | submodules: recursive 17 | - uses: actions/setup-go@v3 18 | with: 19 | go-version: "1.19.x" 20 | - name: Run repo-specific setup 21 | uses: ./.github/actions/go-check-setup 22 | if: hashFiles('./.github/actions/go-check-setup') != '' 23 | - name: Read config 24 | if: hashFiles('./.github/workflows/go-check-config.json') != '' 25 | run: | 26 | if jq -re .gogenerate ./.github/workflows/go-check-config.json; then 27 | echo "RUNGOGENERATE=true" >> $GITHUB_ENV 28 | fi 29 | - name: Install staticcheck 30 | run: go install honnef.co/go/tools/cmd/staticcheck@376210a89477dedbe6fdc4484b233998650d7b3c # 2022.1.3 (v0.3.3) 31 | - name: Check that go.mod is tidy 32 | uses: protocol/multiple-go-modules@v1.2 33 | with: 34 | run: | 35 | go mod tidy 36 | if [[ -n $(git ls-files --other --exclude-standard --directory -- go.sum) ]]; then 37 | echo "go.sum was added by go mod tidy" 38 | exit 1 39 | fi 40 | git diff --exit-code -- go.sum go.mod 41 | - name: gofmt 42 | if: ${{ success() || failure() }} # run this step even if the previous one failed 43 | run: | 44 | out=$(gofmt -s -l .) 45 | if [[ -n "$out" ]]; then 46 | echo $out | awk '{print "::error file=" $0 ",line=0,col=0::File is not gofmt-ed."}' 47 | exit 1 48 | fi 49 | - name: go vet 50 | if: ${{ success() || failure() }} # run this step even if the previous one failed 51 | uses: protocol/multiple-go-modules@v1.2 52 | with: 53 | run: go vet ./... 54 | - name: staticcheck 55 | if: ${{ success() || failure() }} # run this step even if the previous one failed 56 | uses: protocol/multiple-go-modules@v1.2 57 | with: 58 | run: | 59 | set -o pipefail 60 | staticcheck ./... | sed -e 's@\(.*\)\.go@./\1.go@g' 61 | - name: go generate 62 | uses: protocol/multiple-go-modules@v1.2 63 | if: (success() || failure()) && env.RUNGOGENERATE == 'true' 64 | with: 65 | run: | 66 | git clean -fd # make sure there aren't untracked files / directories 67 | go generate ./... 68 | # check if go generate modified or added any files 69 | if ! $(git add . && git diff-index HEAD --exit-code --quiet); then 70 | echo "go generated caused changes to the repository:" 71 | git status --short 72 | exit 1 73 | fi 74 | -------------------------------------------------------------------------------- /.github/workflows/go-test.yml: -------------------------------------------------------------------------------- 1 | # File managed by web3-bot. DO NOT EDIT. 2 | # See https://github.com/protocol/.github/ for details. 3 | 4 | on: [push, pull_request] 5 | name: Go Test 6 | 7 | jobs: 8 | unit: 9 | strategy: 10 | fail-fast: false 11 | matrix: 12 | os: [ "ubuntu", "windows", "macos" ] 13 | go: [ "1.18.x", "1.19.x" ] 14 | env: 15 | COVERAGES: "" 16 | runs-on: ${{ format('{0}-latest', matrix.os) }} 17 | name: ${{ matrix.os }} (go ${{ matrix.go }}) 18 | steps: 19 | - uses: actions/checkout@v3 20 | with: 21 | submodules: recursive 22 | - uses: actions/setup-go@v3 23 | with: 24 | go-version: ${{ matrix.go }} 25 | - name: Go information 26 | run: | 27 | go version 28 | go env 29 | - name: Use msys2 on windows 30 | if: ${{ matrix.os == 'windows' }} 31 | shell: bash 32 | # The executable for msys2 is also called bash.cmd 33 | # https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#shells 34 | # If we prepend its location to the PATH 35 | # subsequent 'shell: bash' steps will use msys2 instead of gitbash 36 | run: echo "C:/msys64/usr/bin" >> $GITHUB_PATH 37 | - name: Run repo-specific setup 38 | uses: ./.github/actions/go-test-setup 39 | if: hashFiles('./.github/actions/go-test-setup') != '' 40 | - name: Run tests 41 | uses: protocol/multiple-go-modules@v1.2 42 | with: 43 | # Use -coverpkg=./..., so that we include cross-package coverage. 44 | # If package ./A imports ./B, and ./A's tests also cover ./B, 45 | # this means ./B's coverage will be significantly higher than 0%. 46 | run: go test -v -shuffle=on -coverprofile=module-coverage.txt -coverpkg=./... ./... 47 | - name: Run tests (32 bit) 48 | if: ${{ matrix.os != 'macos' }} # can't run 32 bit tests on OSX. 49 | uses: protocol/multiple-go-modules@v1.2 50 | env: 51 | GOARCH: 386 52 | with: 53 | run: | 54 | export "PATH=${{ env.PATH_386 }}:$PATH" 55 | go test -v -shuffle=on ./... 56 | - name: Run tests with race detector 57 | if: ${{ matrix.os == 'ubuntu' }} # speed things up. Windows and OSX VMs are slow 58 | uses: protocol/multiple-go-modules@v1.2 59 | with: 60 | run: go test -v -race ./... 61 | - name: Collect coverage files 62 | shell: bash 63 | run: echo "COVERAGES=$(find . -type f -name 'module-coverage.txt' | tr -s '\n' ',' | sed 's/,$//')" >> $GITHUB_ENV 64 | - name: Upload coverage to Codecov 65 | uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # v3.1.0 66 | with: 67 | files: '${{ env.COVERAGES }}' 68 | env_vars: OS=${{ matrix.os }}, GO=${{ matrix.go }} 69 | -------------------------------------------------------------------------------- /.github/workflows/release-check.yml: -------------------------------------------------------------------------------- 1 | # File managed by web3-bot. DO NOT EDIT. 2 | # See https://github.com/protocol/.github/ for details. 3 | 4 | name: Release Checker 5 | on: 6 | pull_request: 7 | paths: [ 'version.json' ] 8 | 9 | jobs: 10 | release-check: 11 | uses: protocol/.github/.github/workflows/release-check.yml@master 12 | -------------------------------------------------------------------------------- /.github/workflows/releaser.yml: -------------------------------------------------------------------------------- 1 | # File managed by web3-bot. DO NOT EDIT. 2 | # See https://github.com/protocol/.github/ for details. 3 | 4 | name: Releaser 5 | on: 6 | push: 7 | paths: [ 'version.json' ] 8 | 9 | jobs: 10 | releaser: 11 | uses: protocol/.github/.github/workflows/releaser.yml@master 12 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Close and mark stale issue 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | 7 | jobs: 8 | stale: 9 | 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write 13 | pull-requests: write 14 | 15 | steps: 16 | - uses: actions/stale@v3 17 | with: 18 | repo-token: ${{ secrets.GITHUB_TOKEN }} 19 | stale-issue-message: 'Oops, seems like we needed more information for this issue, please comment with more details or this issue will be closed in 7 days.' 20 | close-issue-message: 'This issue was closed because it is missing author input.' 21 | stale-issue-label: 'kind/stale' 22 | any-of-labels: 'need/author-input' 23 | exempt-issue-labels: 'need/triage,need/community-input,need/maintainer-input,need/maintainers-input,need/analysis,status/blocked,status/in-progress,status/ready,status/deferred,status/inactive' 24 | days-before-issue-stale: 6 25 | days-before-issue-close: 7 26 | enable-statistics: true 27 | -------------------------------------------------------------------------------- /.github/workflows/tagpush.yml: -------------------------------------------------------------------------------- 1 | # File managed by web3-bot. DO NOT EDIT. 2 | # See https://github.com/protocol/.github/ for details. 3 | 4 | name: Tag Push Checker 5 | on: 6 | push: 7 | tags: 8 | - v* 9 | 10 | jobs: 11 | releaser: 12 | uses: protocol/.github/.github/workflows/tagpush.yml@master 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Protocol Labs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > ## ⚠️ This repository has been moved to https://github.com/ipfs/go-libipfs/tree/main/files. 2 | 3 | # go-ipfs-files 4 | 5 | [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) 6 | [![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) 7 | [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) 8 | [![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) 9 | 10 | > File interfaces and utils used in IPFS 11 | 12 | ## Lead Maintainer 13 | 14 | [Steven Allen](https://github.com/Stebalien) 15 | 16 | ## Documentation 17 | 18 | https://godoc.org/github.com/ipfs/go-ipfs-files 19 | 20 | ## Contribute 21 | 22 | Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/go-ipfs-files/issues)! 23 | 24 | This repository falls under the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). 25 | 26 | ### Want to hack on IPFS? 27 | 28 | [![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md) 29 | 30 | ## License 31 | 32 | MIT 33 | 34 | -------------------------------------------------------------------------------- /deprecated.go: -------------------------------------------------------------------------------- 1 | // Package files: This package and has been deprecated and its contents moved to github.com/ipfs/go-libipfs/files 2 | // 3 | // All content in this package is a thin wrapper around the functionality in the new package location. 4 | package files 5 | 6 | import ( 7 | "github.com/ipfs/go-libipfs/files" 8 | ) 9 | 10 | // Errors 11 | var ( 12 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 13 | ErrNotDirectory = files.ErrNotDirectory 14 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 15 | ErrNotReader = files.ErrNotReader 16 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 17 | ErrNotSupported = files.ErrNotSupported 18 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 19 | ErrInvalidDirectoryEntry = files.ErrInvalidDirectoryEntry 20 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 21 | ErrPathExistsOverwrite = files.ErrPathExistsOverwrite 22 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 23 | ErrUnixFSPathOutsideRoot = files.ErrUnixFSPathOutsideRoot 24 | ) 25 | 26 | // Interfaces 27 | type ( 28 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 29 | Node = files.Node 30 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 31 | File = files.File 32 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 33 | DirEntry = files.DirEntry 34 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 35 | DirIterator = files.DirIterator 36 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 37 | Directory = files.Directory 38 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 39 | FileInfo = files.FileInfo 40 | ) 41 | 42 | // Structs 43 | type ( 44 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 45 | Filter = files.Filter 46 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 47 | Symlink = files.Symlink 48 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 49 | MultiFileReader = files.MultiFileReader 50 | ReaderFile = files.ReaderFile 51 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 52 | SliceFile = files.SliceFile 53 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 54 | TarWriter = files.TarWriter 55 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 56 | WebFile = files.WebFile 57 | ) 58 | 59 | // Helpers 60 | var ( 61 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 62 | WriteTo = files.WriteTo 63 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 64 | NewFilter = files.NewFilter 65 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 66 | NewLinkFile = files.NewLinkFile 67 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 68 | ToSymlink = files.ToSymlink 69 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 70 | NewMultiFileReader = files.NewMultiFileReader 71 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 72 | NewFileFromPartReader = files.NewFileFromPartReader 73 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 74 | NewBytesFile = files.NewBytesFile 75 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 76 | NewReaderFile = files.NewReaderFile 77 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 78 | NewReaderStatFile = files.NewReaderStatFile 79 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 80 | NewReaderPathFile = files.NewReaderPathFile 81 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 82 | NewSerialFile = files.NewSerialFile 83 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 84 | NewSerialFileWithFilter = files.NewSerialFileWithFilter 85 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 86 | FileEntry = files.FileEntry 87 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 88 | NewMapDirectory = files.NewMapDirectory 89 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 90 | NewSliceDirectory = files.NewSliceDirectory 91 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 92 | NewTarWriter = files.NewTarWriter 93 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 94 | ToFile = files.ToFile 95 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 96 | ToDir = files.ToDir 97 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 98 | FileFromEntry = files.FileFromEntry 99 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 100 | DirFromEntry = files.DirFromEntry 101 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 102 | Walk = files.Walk 103 | // Deprecated: moved to github.com/ipfs/go-libipfs/files 104 | NewWebFile = files.NewWebFile 105 | ) 106 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/ipfs/go-ipfs-files 2 | 3 | require github.com/ipfs/go-libipfs v0.4.0 4 | 5 | require ( 6 | github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect 7 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect 8 | ) 9 | 10 | go 1.18 11 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 h1:HVTnpeuvF6Owjd5mniCL8DEXo7uYXdQEmOP4FJbV5tg= 2 | github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= 3 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 4 | github.com/ipfs/go-libipfs v0.4.0 h1:TkUxJGjtPnSzAgkw7VjS0/DBay3MPjmTBa4dGdUQCDE= 5 | github.com/ipfs/go-libipfs v0.4.0/go.mod h1:XsU2cP9jBhDrXoJDe0WxikB8XcVmD3k2MEZvB3dbYu8= 6 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 7 | github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= 8 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= 9 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 10 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 11 | -------------------------------------------------------------------------------- /version.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "v0.3.0" 3 | } 4 | --------------------------------------------------------------------------------