strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing:

Overview

strava-offline

Overview

strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing:

  • synchronizes metadata about your bikes and activities to an SQLite database

  • downloads all your activities as GPX (and supports not downloading bulk exported activities again)

Example of what you can do with the data:

sample-reports

Installation

Using pipx:

pipx ensurepath
pipx install strava-offline

To keep a local git clone around:

git clone https://github.com/liskin/strava-offline
make -C strava-offline pipx

Alternatively, if you don't need the isolated virtualenv that pipx provides, feel free to just:

pip install strava-offline

Setup and usage

  • Run strava-offline sqlite. The first time you do this, it will open Strava in a browser and ask for permissions. The token is then saved and it proceeds to sync activities metadata (this may take a couple dozen seconds the first time). Next time you run this, it uses the saved token and incrementally syncs latest activities (this takes a few seconds).

  • Now you can use sqlite3 to query the activity database, which is placed at ~/.local/share/strava_offline/strava.sqlite by default. Try for example:

    sqlite3 ~/.local/share/strava_offline/strava.sqlite \
    ​  "SELECT CAST(SUM(distance)/1000 AS INT) || ' km' FROM activity"
    
  • For GPX downloading, you'll need to get the _strava4_session cookie from your web browser session. Open https://strava.com/ in your browser and then follow a guide for your browser to obtain the cookie value:

  • You may also need to obtain your own Client ID and Client Secret from https://www.strava.com/settings/api because the built-in ID/Secret is shared with other users and may hit rate limits (HTTP 429 Too Many Requests). Pass these as --client-id and --client-secret command line arguments or export as STRAVA_CLIENT_ID and STRAVA_CLIENT_SECRET environment variables.

    Alternatively, you may just wait a couple minutes and try again, but the rate limits are rather strict, so in the unlikely event this tool gets popular, serious users will have to get their own API application registered.

    (That settings page also lists Your Access Token but this won't let you download private activities or see names of bikes. Therefore its use is not supported in strava-offline.)

Mirror activities metadata

$ strava-offline sqlite --help
Usage: strava-offline sqlite [OPTIONS]

  Synchronize bikes and activities metadata to local sqlite3 database.
  Unless --full is given, the sync is incremental, i.e. only new activities
  are synchronized and deletions aren't detected.

Options:
  Sync options: 
    --full / --no-full    Perform full sync instead of incremental  [default:
                          False]

  Strava API: 
    --client-id TEXT      Strava OAuth 2 client id  [env var:
                          STRAVA_CLIENT_ID]

    --client-secret TEXT  Strava OAuth 2 client secret  [env var:
                          STRAVA_CLIENT_SECRET]

    --token-file FILE     Strava OAuth 2 token store  [default:
                          /home/user/.config/strava_offline/token.json]

    --http-host TEXT      OAuth 2 HTTP server host  [default: 127.0.0.1]
    --http-port INTEGER   OAuth 2 HTTP server port  [default: 12345]
  Database: 
    --database FILE       Sqlite database file  [default: /home/user/.local/sh
                          are/strava_offline/strava.sqlite]

  -v, --verbose           Logging verbosity (0 = WARNING, 1 = INFO, 2 = DEBUG)
  --config FILE           Read configuration from FILE.  [default:
                          /home/user/.config/strava_offline/config.yaml]

  --help                  Show this message and exit.

Mirror activities as GPX

Important: To avoid overloading Strava servers (and possibly getting noticed), first download all your existing activities using the Bulk Export feature of Strava. Then use --dir-activities-backup at least once to let strava-offline reuse these downloaded files.

$ strava-offline gpx --help
Usage: strava-offline gpx [OPTIONS]

  Download known (previously synced using the "sqlite" command) activities
  in GPX format. It's recommended to only use this incrementally to download
  the latest activities every day or week, and download the bulk of your
  historic activities directly from Strava. Use --dir-activities-backup to
  avoid downloading activities already downloaded in the bulk.

Options:
  GPX storage: 
    --dir-activities DIRECTORY    Directory to store gpx files indexed by
                                  activity id  [default: /home/user/.local/sha
                                  re/strava_offline/activities]

    --dir-activities-backup DIRECTORY
                                  Optional path to activities in Strava backup
                                  (no need to redownload these)

  Strava web: 
    --strava4-session TEXT        '_strava4_session' cookie value  [env var:
                                  STRAVA_COOKIE_STRAVA4_SESSION; required]

  Database: 
    --database FILE               Sqlite database file  [default: /home/user/.
                                  local/share/strava_offline/strava.sqlite]

  -v, --verbose                   Logging verbosity (0 = WARNING, 1 = INFO, 2
                                  = DEBUG)

  --config FILE                   Read configuration from FILE.  [default: /ho
                                  me/user/.config/strava_offline/config.yaml]

  --help                          Show this message and exit.

Reports

$ strava-offline --help | grep report-
  report-bikes         Show all-time report by bike
  report-yearly        Show yearly report by activity type
  report-yearly-bikes  Show yearly report by bike
$ strava-offline report-yearly 2020
Activity type      Distance (km)    Moving time (hour)
---------------  ---------------  --------------------
Ride                        4888                   243
InlineSkate                   76                     4
Walk                          59                    13
Hike                          38                     9
StandUpPaddling                9                     1
Canoeing                       2                     1

Configuration file

Secrets (and other options) can be set permanently in a config file, which is located at ~/.config/strava_offline/config.yaml by default (on Linux; on other platforms see output of --help).

Sample config file can be generated using the --config-sample flag:

$ strava-offline --config-sample
# Perform full sync instead of incremental
full: false

# Strava OAuth 2 client id
strava_client_id: '12345'

# Strava OAuth 2 client secret
strava_client_secret: SECRET

# Strava OAuth 2 token store
strava_token_filename: /home/user/.config/strava_offline/token.json

# OAuth 2 HTTP server host
http_host: 127.0.0.1

# OAuth 2 HTTP server port
http_port: 12345

# Sqlite database file
strava_sqlite_database: /home/user/.local/share/strava_offline/strava.sqlite

# Logging verbosity (0 = WARNING, 1 = INFO, 2 = DEBUG)
verbose: 0

# Directory to store gpx files indexed by activity id
dir_activities: /home/user/.local/share/strava_offline/activities

# Optional path to activities in Strava backup (no need to redownload these)
dir_activities_backup: DIRECTORY

# '_strava4_session' cookie value
strava_cookie_strava4_session: TEXT

Donations ( = €)

If you like this tool and wish to support its development and maintenance, please consider a small donation or recurrent support through GitHub Sponsors.

By donating, you'll also support the development of my other projects. You might like these:

Comments
  • Archive GPX processing fails on activities without GPX data

    Archive GPX processing fails on activities without GPX data

    Hi!

    Thanks for creating and sharing this tool. I have a suspicion it's going to save me from writing a bunch of code on my own.

    I ran into an issue today when trying to process the GPX data from my Strava archives. I have some activities that do not have GPX data. For example, an indoor ride on my trainer or a weight lifting session. Here is one example. When GPX processing tries to download the GPX file for this activity, it understandably cannot find one and throws the below stack trace.

    Oddly, the ride does have has_location_data = 1 in the database, though it lacks a start_latlng and end_latlng (see data below).

    Might excluding activities that do not have a start and end latlng here fix the issue?

    I'd be happy to open a PR if you have a fix in mind.

    Thank you again for sharing this project!

                      id = 461483444
               upload_id = 512650720
                    name = Flywheel
              start_date = 2016-01-02T16:33:25Z
             moving_time = 2692
            elapsed_time = 2692
                distance = 0.0
    total_elevation_gain = 0.0
                 gear_id =
                    type = Ride
                 commute = 0
       has_location_data = 1
                    json = {"resource_state": 2, "athlete": {"id": 4403225, "resource_state": 1}, "name": "Flywheel", "distance": 0.0, "moving_time": 2692, "elapsed_time": 2692, "total_elevation_gain": 0, "type": "Ride", "sport_type": "Ride", "workout_type": null, "id": 461483444, "start_date": "2016-01-02T16:33:25Z", "start_date_local": "2016-01-02T10:33:25Z", "timezone": "(GMT-06:00) America/Chicago", "utc_offset": -21600.0, "location_city": null, "location_state": null, "location_country": "United States", "achievement_count": 0, "kudos_count": 0, "comment_count": 0, "athlete_count": 1, "photo_count": 0, "map": {"id": "a461483444", "summary_polyline": "", "resource_state": 2}, "trainer": true, "commute": false, "manual": false, "private": false, "visibility": "everyone", "flagged": false, "gear_id": null, "start_latlng": [], "end_latlng": [], "average_speed": 0.0, "max_speed": 0.0, "has_heartrate": true, "average_heartrate": 168.0, "max_heartrate": 182.0, "heartrate_opt_out": false, "display_hide_heartrate_option": true, "upload_id": 512650720, "upload_id_str": "512650720", "external_id": "2016-01-02-1033_Spin_Class_WF.tcx", "from_accepted_tag": false, "pr_count": 0, "total_photo_count": 0, "has_kudoed": false}
    

    Here's the full traceback, in case it's helpful.

    (venv) [email protected] running % strava-offline gpx --dir-activities-backup data/strava_archive_20221122 --database data/strava.sqlite --strava4-session 1ggcfckqdog722tg57u55s6nuq0t22au --config co
    nfig.yaml
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 124, in get_gpx
        return self._get_gpx("original", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'application/octet-stream', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:03:51 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 ad82d8a3c91257adecf18541576c7e72.cloudfront.net (CloudFront)', 'ETag': 'W/"f74f19e94a7e22a35f9d1cf12f85aadc"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'b9c1ec14-68cb-42b4-99c3-0c5c8cd21031', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'Content-Disposition': 'attachment; filename="Flywheel.tcx"; filename*=UTF-8\'\'Flywheel.tcx', 'X-Content-Type-Options': 'nosniff', 'Content-Transfer-Encoding': 'binary', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'oJVUCZfFHkWfzHF8L6utIPCUhTMX2gLpqACYrq0LyvRA7hyCV4Cxmw=='}
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/bin/strava-offline", line 8, in <module>
        sys.exit(cli())
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
        return self.main(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
        rv = self.invoke(ctx)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
        return __callback(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/config.py", line 36, in wrapper
        return f(config_class(**config_kwargs), **f_kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/cli.py", line 42, in cli_gpx
        gpx.sync(config=config, strava=strava)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 75, in sync
        download_activities(db=db, strava=strava, dir_activities=config.dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 59, in download_activities
        download_gpx(strava=strava, activity_id=activity_id, path=dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 42, in download_gpx
        gpx = strava.get_gpx(activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 126, in get_gpx
        return self._get_gpx("gpx", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:03:52 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 ad82d8a3c91257adecf18541576c7e72.cloudfront.net (CloudFront)', 'ETag': 'W/"6a683fcb8869821749f7cb424d9bd470"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'd353cde2-af0b-4179-8957-4e0b13d70fb8', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'Content-Encoding': 'gzip', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'X-Content-Type-Options': 'nosniff', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'W8uwhNS6kMaY0fYQcGzVCjZnPTDK-tfK6KGUjpcpKppD7i_0vfKOqQ=='}
    (venv) [email protected] running % strava-offline gpx --dir-activities-backup data/strava_archive_20221122 --config config.yaml --verbose
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 124, in get_gpx
        return self._get_gpx("original", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'application/octet-stream', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:05:45 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 b014854bd0108b7ed0058504b69ccb5a.cloudfront.net (CloudFront)', 'ETag': 'W/"f74f19e94a7e22a35f9d1cf12f85aadc"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'd356e70a-cc99-437e-973d-cba5982f2351', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'Content-Disposition': 'attachment; filename="Flywheel.tcx"; filename*=UTF-8\'\'Flywheel.tcx', 'X-Content-Type-Options': 'nosniff', 'Content-Transfer-Encoding': 'binary', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'IZdK7eu8C797NOyHRGJ1KuweMGfd53e0NjIKYqbh4kCMONL65U-aJQ=='}
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/bin/strava-offline", line 8, in <module>
        sys.exit(cli())
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
        return self.main(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
        rv = self.invoke(ctx)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
        return __callback(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/config.py", line 36, in wrapper
        return f(config_class(**config_kwargs), **f_kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/cli.py", line 42, in cli_gpx
        gpx.sync(config=config, strava=strava)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 75, in sync
        download_activities(db=db, strava=strava, dir_activities=config.dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 59, in download_activities
        download_gpx(strava=strava, activity_id=activity_id, path=dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 42, in download_gpx
        gpx = strava.get_gpx(activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 126, in get_gpx
        return self._get_gpx("gpx", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:05:46 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 b014854bd0108b7ed0058504b69ccb5a.cloudfront.net (CloudFront)', 'ETag': 'W/"d9eb2cd9cb238fb428e1b5f1b599ce10"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'dada34b2-6eda-4d0b-bd37-07e5447f6339', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'Content-Encoding': 'gzip', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'X-Content-Type-Options': 'nosniff', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'yarXWXK9_6m_Afsa2TC7HiaIGqjLNrI-Zxt3q4V9MJrDH2cKy5aVDQ=='}
    
    opened by gjreda 4
  • Requires setuptools

    Requires setuptools

    Hi! I installed the package using Poetry 1.2.2 and Python 3.10.6 (macOS, homebrew, pyenv). Running strava-offline results in:

    Traceback (most recent call last):
      File "/Users/honza/Library/Caches/pypoetry/virtualenvs/honzajavorekcz-99qNy8GJ-py3.10/bin/strava-offline", line 5, in <module>
        from strava_offline.cli import cli
      File "/Users/honza/Library/Caches/pypoetry/virtualenvs/honzajavorekcz-99qNy8GJ-py3.10/lib/python3.10/site-packages/strava_offline/__init__.py", line 2, in <module>
        from pkg_resources import get_distribution, DistributionNotFound
    ModuleNotFoundError: No module named 'pkg_resources'
    

    I found this solution:

    $ poetry add setuptools
    $ poetry add strava-offline
    

    Then running strava-offline lists its commands. Not sure whether this is expected behavior or a bug.

    opened by honzajavorek 3
  • Bump actions/setup-python from 2 to 4

    Bump actions/setup-python from 2 to 4

    Bumps actions/setup-python from 2 to 4.

    Release notes

    Sourced from actions/setup-python's releases.

    v4.0.0

    What's Changed

    • Support for python-version-file input: #336

    Example of usage:

    - uses: actions/[email protected]
      with:
        python-version-file: '.python-version' # Read python version from a file
    - run: python my_script.py
    

    There is no default python version for this setup-python major version, the action requires to specify either python-version input or python-version-file input. If the python-version input is not specified the action will try to read required version from file from python-version-file input.

    • Use pypyX.Y for PyPy python-version input: #349

    Example of usage:

    - uses: actions/[email protected]
      with:
        python-version: 'pypy3.9' # pypy-X.Y kept for backward compatibility
    - run: python my_script.py
    
    • RUNNER_TOOL_CACHE environment variable is equal AGENT_TOOLSDIRECTORY: #338

    • Bugfix: create missing pypyX.Y symlinks: #347

    • PKG_CONFIG_PATH environment variable: #400

    • Added python-path output: #405 python-path output contains Python executable path.

    • Updated zeit/ncc to vercel/ncc package: #393

    • Bugfix: fixed output for prerelease version of poetry: #409

    • Made pythonLocation environment variable consistent for Python and PyPy: #418

    • Bugfix for 3.x-dev syntax: #417

    • Other improvements: #318 #396 #384 #387 #388

    Update actions/cache version to 2.0.2

    In scope of this release we updated actions/cache package as the new version contains fixes related to GHES 3.5 (actions/setup-python#382)

    Add "cache-hit" output and fix "python-version" output for PyPy

    This release introduces new output cache-hit (actions/setup-python#373) and fix python-version output for PyPy (actions/setup-python#365)

    The cache-hit output contains boolean value indicating that an exact match was found for the key. It shows that the action uses already existing cache or not. The output is available only if cache is enabled.

    ... (truncated)

    Commits
    • 13ae5bb Merge pull request #517 from rentziass/rentziass/update-actions-core
    • 0c4d7b8 Update @​actions/core to 1.10.0
    • 13a464f Fix typo (#503)
    • b4fe97e upgrade @​actions/cache so it respects SEGMENT_DOWNLOAD_TIMEOUT_MINS (#499)
    • 434aeab Bump @​actions/core from 1.7.0 to 1.9.1 (#495)
    • 98c991d Only use github.token on github.com (#443)
    • 397a35f Merge pull request #492 from al-cheb/al-cheb/update-runner-link
    • 48a0f00 Update runner links
    • 978fd06 Merge pull request #491 from lkfortuna/patch-2
    • 050e616 Update README.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump liskin/gh-problem-matcher-wrap from 1 to 2

    Bump liskin/gh-problem-matcher-wrap from 1 to 2

    Bumps liskin/gh-problem-matcher-wrap from 1 to 2.

    Release notes

    Sourced from liskin/gh-problem-matcher-wrap's releases.

    v2.0.0: Bump runner to node16, bump deps

    What's Changed

    New Contributors

    Full Changelog: https://github.com/liskin/gh-problem-matcher-wrap/compare/v1.0.2...v2.0.0

    v1.0.2: Bump @​actions/core

    What's Changed

    Full Changelog: https://github.com/liskin/gh-problem-matcher-wrap/compare/v1.0.1...v1.0.2

    v1.0.1: More problem matchers, improved docs

    No release notes provided.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump actions/checkout from 2 to 3

    Bump actions/checkout from 2 to 3

    Bumps actions/checkout from 2 to 3.

    Release notes

    Sourced from actions/checkout's releases.

    v3.0.0

    • Updated to the node16 runtime by default
      • This requires a minimum Actions Runner version of v2.285.0 to run, which is by default available in GHES 3.4 or later.

    v2.5.0

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.5.0

    v2.4.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.4.2

    v2.4.1

    • Fixed an issue where checkout failed to run in container jobs due to the new git setting safe.directory

    v2.4.0

    • Convert SSH URLs like org-<ORG_ID>@github.com: to https://github.com/ - pr

    v2.3.5

    Update dependencies

    v2.3.4

    v2.3.3

    v2.3.2

    Add Third Party License Information to Dist Files

    v2.3.1

    Fix default branch resolution for .wiki and when using SSH

    v2.3.0

    Fallback to the default branch

    v2.2.0

    Fetch all history for all tags and branches when fetch-depth=0

    v2.1.1

    Changes to support GHES (here and here)

    ... (truncated)

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    v3.1.0

    v3.0.2

    v3.0.1

    v3.0.0

    v2.3.1

    v2.3.0

    v2.2.0

    v2.1.1

    • Changes to support GHES (here and here)

    v2.1.0

    v2.0.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump actions/cache from 2 to 3

    Bump actions/cache from 2 to 3

    Bumps actions/cache from 2 to 3.

    Release notes

    Sourced from actions/cache's releases.

    v3.0.0

    • This change adds a minimum runner version(node12 -> node16), which can break users using an out-of-date/fork of the runner. This would be most commonly affecting users on GHES 3.3 or before, as those runners do not support node16 actions and they can use actions from github.com via github connect or manually copying the repo to their GHES instance.

    • Few dependencies and cache action usage examples have also been updated.

    v2.1.7

    Support 10GB cache upload using the latest version 1.0.8 of @actions/cache

    v2.1.6

    • Catch unhandled "bad file descriptor" errors that sometimes occurs when the cache server returns non-successful response (actions/cache#596)

    v2.1.5

    • Fix permissions error seen when extracting caches with GNU tar that were previously created using BSD tar (actions/cache#527)

    v2.1.4

    • Make caching more verbose #650
    • Use GNU tar on macOS if available #701

    v2.1.3

    • Upgrades @actions/core to v1.2.6 for CVE-2020-15228. This action was not using the affected methods.
    • Fix error handling in uploadChunk where 400-level errors were not being detected and handled correctly

    v2.1.2

    • Adds input to limit the chunk upload size, useful for self-hosted runners with slower upload speeds
    • No-op when executing on GHES

    v2.1.1

    • Update @actions/cache package to v1.0.2 which allows cache action to use posix format when taring files.

    v2.1.0

    • Replaces the http-client with the Azure Storage SDK for NodeJS when downloading cache content from Azure. This should help improve download performance and reliability as the SDK downloads files in 4 MB chunks, which can be parallelized and retried independently
    • Display download progress and speed
    Changelog

    Sourced from actions/cache's changelog.

    Releases

    3.0.0

    • Updated minimum runner version support from node 12 -> node 16

    3.0.1

    • Added support for caching from GHES 3.5.
    • Fixed download issue for files > 2GB during restore.

    3.0.2

    • Added support for dynamic cache size cap on GHES.

    3.0.3

    • Fixed avoiding empty cache save when no files are available for caching. (issue)

    3.0.4

    • Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. (issue)

    3.0.5

    • Removed error handling by consuming actions/cache 3.0 toolkit, Now cache server error handling will be done by toolkit. (PR)

    3.0.6

    • Fixed #809 - zstd -d: no such file or directory error
    • Fixed #833 - cache doesn't work with github workspace directory

    3.0.7

    • Fixed #810 - download stuck issue. A new timeout is introduced in the download process to abort the download if it gets stuck and doesn't finish within an hour.

    3.0.8

    • Fix zstd not working for windows on gnu tar in issues #888 and #891.
    • Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 60 minutes.

    3.0.9

    • Enhanced the warning message for cache unavailablity in case of GHES.

    3.0.10

    • Fix a bug with sorting inputs.
    • Update definition for restore-keys in README.md

    3.0.11

    • Update toolkit version to 3.0.5 to include @actions/core@^1.10.0
    • Update @actions/cache to use updated saveState and setOutput functions from @actions/core@^1.10.0
    Commits
    • 9b0c1fc Merge pull request #956 from actions/pdotl-version-bump
    • 18103f6 Fix licensed status error
    • 3e383cd Update RELEASES
    • 43428ea toolkit versioon update and version bump for cache
    • 1c73980 3.0.11
    • a3f5edc Merge pull request #950 from rentziass/rentziass/update-actions-core
    • 831ee69 Update licenses
    • b9c8bfe Update @​actions/core to 1.10.0
    • 0f20846 Merge pull request #946 from actions/Phantsure-patch-2
    • 862fc14 Update README.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(1.0.3)
Owner
Tomáš Janoušek
Software (free/open-source), cycling (road, gravel, urban, fixed, uni), beer (🇨🇿). Not necessarily in that order. Current @xmonad maintainer.
Tomáš Janoušek
Simple, Pythonic remote execution and deployment.

Welcome to Fabric! Fabric is a high level Python (2.7, 3.4+) library designed to execute shell commands remotely over SSH, yielding useful Python obje

Fabric 13.8k Jan 06, 2023
A repository containing a short tutorial for Docker (with Python).

Docker Tutorial for IFT 6758 Lab In this repository, we examine the advtanges of virtualization, what Docker is and how we can deploy simple programs

Arka Mukherjee 0 Dec 14, 2021
This is a tool to develop, build and test PHP extensions in Docker containers.

Develop, Build and Test PHP Extensions This is a tool to develop, build and test PHP extensions in Docker containers. Installation Clone this reposito

Suora GmbH 10 Oct 22, 2022
This repository contains code examples and documentation for learning how applications can be developed with Kubernetes

BigBitBus KAT Components Click on the diagram to enlarge, or follow this link for detailed documentation Introduction Welcome to the BigBitBus Kuberne

51 Oct 16, 2022
Travis CI testing a Dockerfile based on Palantir's remix of Apache Cassandra, testing IaC, and testing integration health of Debian

Testing Palantir's remix of Apache Cassandra with Snyk & Travis CI This repository is to show Travis CI testing a Dockerfile based on Palantir's remix

Montana Mendy 1 Dec 20, 2021
Tools for writing awesome Fabric files

About fabtools includes useful functions to help you write your Fabric files. fabtools makes it easier to manage system users, packages, databases, et

1.3k Dec 30, 2022
Build Netbox as a Docker container

netbox-docker The Github repository houses the components needed to build Netbox as a Docker container. Images are built using this code and are relea

Farshad Nick 1 Dec 18, 2021
A curated list of awesome DataOps tools

Awesome DataOps A curated list of awesome DataOps tools. Awesome DataOps Data Catalog Data Exploration Data Ingestion Data Lake Data Processing Data Q

Kelvin S. do Prado 40 Dec 23, 2022
Wiremind Kubernetes helper

Wiremind Kubernetes helper This Python library is a high-level set of Kubernetes Helpers allowing either to manage individual standard Kubernetes cont

Wiremind 3 Oct 09, 2021
Organizing ssh servers in one shell.

NeZha (哪吒) NeZha is a famous chinese deity who can have three heads and six arms if he wants. And my NeZha tool is hoping to bring developer such mult

Zilin Zhu 8 Dec 20, 2021
Ansible for DevOps examples.

Ansible for DevOps Examples This repository contains Ansible examples developed to support different sections of Ansible for DevOps, a book on Ansible

Jeff Geerling 6.6k Jan 08, 2023
Universal Command Line Interface for Amazon Web Services

aws-cli This package provides a unified command line interface to Amazon Web Services. Jump to: Getting Started Getting Help More Resources Getting St

Amazon Web Services 13.3k Jan 01, 2023
Manage your SSH like a boss.

--- storm is a command line tool to manage your ssh connections. features adding, editing, deleting, listing, searching across your SSHConfig. command

Emre Yılmaz 3.9k Jan 03, 2023
Cross-platform lib for process and system monitoring in Python

Home Install Documentation Download Forum Blog Funding What's new Summary psutil (process and system utilities) is a cross-platform library for retrie

Giampaolo Rodola 9k Jan 02, 2023
Build and Push docker image in Python (luigi + docker-py)

Docker build images workflow in Python Since docker hub stopped building images for free accounts, I've been looking for another way to do it. I could

Fabien D. 2 Dec 15, 2022
Ingress patch example by Kustomize

Ingress patch example by Kustomize

Jinu 10 Nov 14, 2022
Learning and experimenting with Kubernetes

Kubernetes Experiments This repository contains code that I'm using to learn and experiment with Kubernetes. 1. Environment setup minikube kubectl doc

Richard To 10 Dec 02, 2022
Phonebook application to manage phone numbers

PhoneBook Phonebook application to manage phone numbers. How to Use run main.py python file. python3 main.py Links Download Source Code: Click Here M

Mohammad Dori 3 Jul 15, 2022
ServerStatus 云探针、多服务器探针、云监控、多服务器云监控

ServerStatus 云探针、多服务器探针、云监控、多服务器云监控 基于ServerStatus-Hotaru膜改版的套娃膜改版(实际上本README也是抄它的)。 主要将client改为通过http提交数据,以及将服务端换成了php以便减小部署成本(PHP is the best!) 默认图片

shirakun 16 Apr 14, 2022